我正在尝试创建一个递归方法,但它正在失去与 this
的绑定(bind)。这是重现我的问题的最简单方法:
var Foo = function() {
return {
foo : 'foo',
bar : function() {
console.log(this.foo);
setTimeout(this.bar, 500);
}
};
}
var foo = new Foo();
foo.bar();
那只会运行两次。第一次它会将 foo
记录到控制台,第二次它会记录 undefined
。然后当然,它不会再运行了,因为 bar
不再是 this
的属性,因为我假设它已重置为全局对象。
我在我的 bar
方法中尝试了 var that = this
并引用了 that.foo
和 that.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/