从内部引用对象函数的正确方法是什么,这样我可以在Javascript中使用setTimeout多次调用它?换句话说,我希望能够做到这一点:
Foo.prototype.move = function() {
if (this.count_a < 5) {
this.count_a += 1;
// setTimeout(this.move, 500); // doesn't work
// setTimeout(function() { this.move(); }, 500); // doesn't work
}
}
我尝试过几件事,但似乎都没有效果:http://jsfiddle.net/tga8r/1/
答案 0 :(得分:1)
超时内的this
属性将指向执行传递回调的对象。
使用.bind(this)
来说,调用者必须将此点用于传递的对象。
Foo.prototype.move = function() {
if (this.count_a < 5) {
this.count_a += 1;
// setTimeout(this.move, 500);
setTimeout(function() { this.move(); }.bind(this), 500);
}
}
或使用参考:
Foo.prototype.move = function() {
var self = this;
if (this.count_a < 5) {
this.count_a += 1;
// setTimeout(this.move, 500);
setTimeout(function() { self.move(); }, 500);
}
}
答案 1 :(得分:1)
当窗口计时器功能运行时,它具有全局范围 - 它不在您的功能范围内和窗口中。
标记此 -
Foo.prototype.move= function(){
var T= this;
if(T.count_a<5){
T.count_a += 1;
setTimeout(function(){T.move();},500);
}
}
答案 2 :(得分:0)
function move (a) {
setTimeout(
function() {
if (a < 10) {
a = a+ 1;
move(a);
}
}, 500); }
move(0);