Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Javascript中正确引用对象方法本身?_Javascript - Fatal编程技术网

如何在Javascript中正确引用对象方法本身?

如何在Javascript中正确引用对象方法本身?,javascript,Javascript,从对象函数本身引用对象函数的正确方法是什么,这样我就可以在Javascript中使用setTimeout多次调用它?换句话说,我希望能够做到这一点: Foo.prototype.move = function() { if (this.count_a < 5) { this.count_a += 1; // setTimeout(this.move, 500); // doesn't work // setTimeout(f

从对象函数本身引用对象函数的正确方法是什么,这样我就可以在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
  }
}
Foo.prototype.move=function(){
如果(此计数a<5){
这个。计数a+=1;
//setTimeout(this.move,500);//不起作用
//setTimeout(function(){this.move();},500);//不起作用
}
}

我已经尝试了几件事情,但似乎都不起作用:

超时内的
属性将指向确实执行传递的回调的对象

使用
.bind(this)
可以说,调用程序必须使用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(){
如果(此计数a<5){
这个。计数a+=1;
//setTimeout(this.move,500);
setTimeout(函数(){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);  
  }
}
Foo.prototype.move=function(){
var self=这个;
如果(此计数a<5){
这个。计数a+=1;
//setTimeout(this.move,500);
setTimeout(函数(){self.move();},500);
}
}

当窗口计时器功能运行时,它有一个全局范围-它不在您的功能范围内,也在窗口内

标记-

Foo.prototype.move= function(){
    var T= this;
    if(T.count_a<5){
        T.count_a += 1;
        setTimeout(function(){T.move();},500);
    }
}
Foo.prototype.move=function(){
var T=这个;
if(T.count_a
功能移动(a){
设置超时(
函数(){
如果(a<10){
a=a+1;
动议(a);
} 
}, 500); }
移动(0);
function move (a) {
    setTimeout(
        function() { 
           if (a < 10) {
            a = a+ 1; 
            move(a);
           } 
        }, 500); }

move(0);