2014-12-01 78 views
1

好的,所以我有两个类。 类1包含一个特定的函数,它访问一些类的属性。这是什么样子:将类函数作为参数传递给另一个类,用作JavaScript中的回调函数

function class1() { 
    this.variable = "something"; 
} 

class1.prototype.callback = function() { 
    console.log(this.variable); // Returns undefined 
} 

2级可以调用它被赋予任何功能,如下所示:

function class2() {} 

class2.prototype.caller = function(callback) { 
    callback(); 
} 

然后在我的规则的Javascript我这样做:

var c1 = new class1(); 
var c2 = new class2(); 
c2.caller(c1.callback); 

它应该返回“某些东西”,但它会抛出一个未定义的错误。我知道这是因为它在class2的范围内,它试图访问那里的变量,但是我不知道如何让它在class1的范围内执行。

任何帮助,非常感谢!

+5

不分配在构造函数中'prototype'方法。 – Pointy 2014-12-01 15:59:41

+0

尖刺是正确的,原型的目的是为了避免在每个instanciation被定义。 – axelduch 2014-12-01 16:00:20

+0

谢谢,我不知道。我会编辑我的课程:) – Qub1 2014-12-01 17:02:58

回答

4

使用.bind()或包装功能:

c2.caller(c1.callback.bind(c1)); 

请注意,你的代码是错误的,因为它称为通过在返回值之前的功能。

或者:

c2.caller(function() { c1.callback(); }); 
+0

啊,是的,我看到了,我输入了这个错误。我要去尝试绑定,谢谢! – Qub1 2014-12-01 17:00:09

+0

@ Qub1'.bind()'唯一的问题是,它在真正的旧浏览器中不受支持,但[MDN网站提供了一个补丁。](https://developer.mozilla.org/zh-CN/)美国/文档/网络/的JavaScript /参考/ Global_Objects /功能/绑定#填充工具) – Pointy 2014-12-01 17:04:26

相关问题