javascript - 为什么 `this` 失去对我的对象的绑定(bind)?

标签 javascript recursion this javascript-objects

我正在尝试创建一个递归方法,但它正在失去与 this 的绑定(bind)。这是重现我的问题的最简单方法:

var Foo = function() {
    return {
        foo : 'foo',
        bar : function() {
            co​nsole.log(this.foo);
            setTimeout(this.bar, 500);
        }
    }​;
}
var foo = new Foo();
foo.bar();​

那只会运行两次。第一次它会将 foo 记录到控制台,第二次它会记录 undefined。然后当然,它不会再运行了,因为 bar 不再是 this 的属性,因为我假设它已重置为全局对象。

我在我的 bar 方法中尝试了 var that = this 并引用了 that.foothat.bar但它没有改变任何东西。我还在 return 语句上方尝试了 var that = this,但问题仍然存在。

预期结果:

foo

foo

foo

foo

... and so on

这是一个例子 http://jsfiddle.net/k2hTJ/结果是:

foo

undefined

最佳答案

setTimeout 将在当前范围内调用它的函数,但将 this 作为全局对象。

解决此问题的最佳方法是执行以下操作:

var that = this;
setTimeout(function() {that.bar.apply(that);},500);

关于javascript - 为什么 `this` 失去对我的对象的绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14076702/

相关文章:

c++ - 构造函数和对象创建中的“this”

JavaScript + jQuery 这个范围

javascript - 验证和运行 javascript (html5 canvas) 的问题

Javascript 单元测试框架

JavaScript if() 语句未按预期评估

c++ - 什么时候返回递归函数?

c++ - 在并行桶排序中使用递归基数排序

java - 递归方法检查一行整数是否为降序 : return true/false

javascript - 特定属性上的 jquery .click() 函数,返回多个元素

Javascript 绑定(bind)与其实例一起使用