我在查找如何传递对象方法时遇到问题,而不是在进行回调时对"通用原型"方法进行排序.
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函数,但我想了解这个问题.
您需要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)asthis。
所以你创建这个界限然后调用它。