传递此错误的TypeScript setTimeout循环

时间:2017-01-20 12:17:29

标签: javascript function class typescript timeout

尝试在TypeScript中创建一个计时器循环:

timeout() {
    setTimeout(function () {
        console.log('Test');
        this.timeout();
    }, 1000/60);
}

但是在第一个循环正常工作后我得到了这个错误:“未捕获TypeError:this.timeout不是函数”。看起来这个变量在初始循环后不存在。有什么想法吗?

2 个答案:

答案 0 :(得分:21)

因为this没有引用该对象。每个功能都有自己的功能。因此,this是由setTimeout()内的匿名函数定义的this

要使您的程序正常工作,您需要在超时前保持class Test { timeout() { var that = this; setTimeout(function () { console.log('Test'); that.timeout(); }, 1000/60); } } let t = new Test(); t.timeout();并使用该变量。

lambda functions

或者您可以使用this,这会将Lamda保留在您的对象上。this的{​​{1}}将引用外部的this,它调用lambda函数。

class Test {
      
   timeout() {
       setTimeout(() => {
           console.log('Test');
           this.timeout();
       }, 1000/60);
   } 
      
}


let t = new Test();
t.timeout();

答案 1 :(得分:9)

因为这种情况丢失了。使用箭头功能这是更好的。

timeout() {
    setTimeout(() => {
        console.log('Test');
        this.timeout();
    }, 1000/60);
}