我基本上是在尝试使用回调链接函数,但仍然保留“this”的原始含义。所以,假设我有一个简单的函数,它接受一个回调函数并响应结果:
function simple(callback) {
var s = do something ...
callback(s);
}
然后我有一些原型函数,我需要访问链末尾的“this”对象。我希望 f1 调用 f2 调用简单但将结果发送到 f3。以下是你天真地做的方式:
A.prototype.f1 = function() {
this.f2(this.f3);
}
A.prototype.f2 = function(callback) {
simple(callback);
}
A.prototype.f3 = function(result) {
// need access to 'this' object, e.g.,
var a = this.a;
var b = this.b;
...
}
问题是当您到达 f3 时,“this”不再是您认为的对象(它是全局对象)。那么有什么解决方案吗?我实际上已经想出了一个解决方案,但它看起来非常粗糙,想看看我是否遗漏了一些明显的东西。
请注意,可能有一些方法可以移动名称以使事情更清楚,但我不能简单地从 f2 调用 f3 或类似的东西......我真的需要保持示例中的内容。
谢谢参观。
编辑:答案是使用绑定,如下所述。谢谢您的帮助!不过,我想我会分享我的“粗略”解决方案作为练习(其他一切都是一样的):
A.prototype.f1 = function() {
this.f2("f3");
}
A.prototype.f2 = function(funcname) {
var that = this;
simple(function(result) { that[funcname](result); });
}
我应该注意到它有效,唯一的限制(除了丑陋之外)是回调函数必须是当前对象的成员(这不是问题)。再次感谢您的帮助!