尝试在 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
保持对对象的。Lamda
的this
将引用外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);
}