使用带有原型函数的回调函数

Tod*_*ilo 7 javascript

我在查找如何传递对象方法时遇到问题,而不是在进行回调时对"通用原型"方法进行排序.

function Client() {
    this.name = "hello";
}

Client.prototype.apiCall = function(method, params, callback) {
    callback();
}


Client.prototype.onLogin = function(error, data) {
    console.log(this.name);// undefined!!!!
}

Client.prototype.start = function() {
    var self = this;
    self.apiCall('rtm.start', {
    }, self.onLogin) // passing of method like this does not work.
}
Run Code Online (Sandbox Code Playgroud)

我正在传递onLogin方法,但它不起作用.这是我重写的代码.以前我嵌套了Client函数中的所有方法,但是我知道这不是实现它的方法所以现在我正在尝试使用原型.

我知道有一些解决方案"绑定"Client()函数内的onLogin函数,但我想了解这个问题.

hel*_*hod 4

您需要apiCall使用以下方法将 s 上下文绑定到回调bind

Client.prototype.apiCall = function(method, params, callback) {
    var bound = callback.bind(this);
    bound();
}
Run Code Online (Sandbox Code Playgroud)

否则,将其中的 thisonLogin设置为全局对象。

有关更多详细信息,请参阅调用、应用和绑定

基本上.bind(obj)返回一个函数,该函数在调用时将在内部使用(obj)as this
所以你创建这个界限然后调用它。