javascript - 在 javascript 中链接回调并保留 'this'

标签 javascript function callback this

我基本上尝试使用回调来链接函数,但仍然保留“this”的原始含义。因此,假设我有一个简单的函数,它接受回调函数并返回结果:

function simple(callback) {
    var s = do something ...
    callback(s);
}

然后我有一些原型(prototype)函数,我需要访问链末尾的“this”对象。我希望 f1 调用 f2,f2 调用 simple 但将结果发送给 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 或类似的东西......我真的需要保持示例中的内容。

感谢您的浏览。

编辑:答案是使用绑定(bind),如下所述。谢谢您的帮助!不过,我想我应该分享我的“粗略”解决方案作为练习(其他一切都相同):

A.prototype.f1 = function() {
    this.f2("f3");
}

A.prototype.f2 = function(funcname) {
    var that = this;
    simple(function(result) { that[funcname](result); });
}

我应该注意到它有效,唯一的限制(除了丑陋之外)是回调函数必须是当前对象的成员(这不是问题)。再次感谢您的帮助!

最佳答案

将您的 f1 函数更改为以下内容:

A.prototype.f1 = function () {
    this.f2(this.f3.bind(this));
}

bind 函数允许您指定this 的值。查看this example .

关于javascript - 在 javascript 中链接回调并保留 'this',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17669226/

相关文章:

javascript - 将变量传递给回调函数

javascript - CSS 三 Angular 形定位

javascript - 就像按钮增量计数器不起作用。 PHP、AJAX、MySQL、javascript

javascript - 如何将先前索引值的总和存储在一个数组中?

ios - 在 Objective-C 中调用函数时的逻辑

javascript - 我可以写一个JS函数: returns as a normal function would or wait and return AJAX results?

javascript - 如何手动将事件添加到类似时间轴小部件

c - 按值将指针传递给c函数中的指针

用列表中的 NA 替换连续的重复值

调用函数后的 JavaScript 回调