Mav*_*ick 1 javascript recursion this javascript-objects
我正在尝试创建一个递归方法,但它正在失去它的绑定this.以下是重新创建问题的最简单方法:
var Foo = function() {
return {
foo : 'foo',
bar : function() {
co?nsole.log(this.foo);
setTimeout(this.bar, 500);
}
}?;
}
var foo = new Foo();
foo.bar();?
Run Code Online (Sandbox Code Playgroud)
那只会跑两次.它第一次登录foo到控制台,第二次登录undefined.然后当然,它将不再运行,因为bar它不再是属性,this因为我认为它被重置为全局对象.
我尝试var that = this了我的bar方法和引用that.foo,that.bar但它没有改变任何东西.我也在var that = this我的return陈述之上尝试过,问题仍然存在.
预期结果:
FOO
FOO
FOO
FOO
... 等等
这是一个示例http://jsfiddle.net/k2hTJ/,结果如下:
FOO
未定义
setTimeout将在当前范围内调用其函数,但将其this作为全局对象.
解决这个问题的最佳方法是执行以下操作:
var that = this;
setTimeout(function() {that.bar.apply(that);},500);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
89 次 |
| 最近记录: |