将类函数作为参数传递给另一个类,以用作JavaScript中的回调

Qub*_*ub1 3 javascript class

好吧,所以我有两节课.类1包含一个特定的函数,它访问某些类的属性.这就是它的样子:

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

class1.prototype.callback = function() {
    console.log(this.variable); // Returns undefined
}
Run Code Online (Sandbox Code Playgroud)

Class 2可以调用它给出的任何函数,如下所示:

function class2() {}

class2.prototype.caller = function(callback) {
    callback();
}
Run Code Online (Sandbox Code Playgroud)

然后在我的常规Javascript中我这样做:

var c1 = new class1();
var c2 = new class2();
c2.caller(c1.callback);
Run Code Online (Sandbox Code Playgroud)

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

任何帮助是极大的赞赏!

Poi*_*nty 9

使用.bind()或包装函数:

c2.caller(c1.callback.bind(c1));
Run Code Online (Sandbox Code Playgroud)

请注意,您的代码错误,因为它在传递返回值之前调用了该函数.

或者:

c2.caller(function() { c1.callback(); });
Run Code Online (Sandbox Code Playgroud)