如何在Javascript中正确引用自身内的对象方法?

时间:2014-03-21 08:07:56

标签: javascript

从内部引用对象函数的正确方法是什么,这样我可以在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/

3 个答案:

答案 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);