TypeScript setTimeout 循环传递此错误



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

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

但是在第一个循环正常工作后,我收到此错误:"未捕获的类型错误:this.timeout 不是一个函数"。似乎这个变量在初始循环后不存在。有什么想法吗?

因为你的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保持对对象的。Lamdathis将引用外this,它调用lambda函数。

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

由于这个上下文丢失了。使用箭头功能这样更好。

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

相关内容

  • 没有找到相关文章

最新更新