我试图在Date.now()调用回调后存储setIntervall ()。在那之后,我想清除空隙,所以它只开火一次。所有这些都在课堂上。但是,我存储intervalID的变量--我希望它是可用的--“类范围的”保持“未定义”。我很确定我做了什么与JS的范围严重错误,但我找不出什么。
class Signal {
t : number;
private intervallId : number | undefined;
constructor(t : number) {
this.t = t;
}
wait() {
this.intervallId = setInterval(this.signalTriggered, this.t)
console.log("Never executed.")
}
signalTriggered() {
const triggerTime : number = Date.now()
console.log(this.intervallId) /* always undefined */
if (this.intervallId) {clearInterval(this.intervallId)
console.log(triggerTime); }
}
}
var timer = new Signal(2000)
timer.wait()
console.log("Done.") /* Never printed out. */发布于 2022-09-25 20:57:47
问题是this的引用,当将方法作为参数传递给setIterval时,您将失去它的原始引用。
您可以使用箭头函数包装该方法:
setInterval(() => this.signalTriggered(), this.t)或者使用Function.prototype.bind分配this的引用
setInterval(this.signalTriggered.bind(this), this.t)https://stackoverflow.com/questions/73847771
复制相似问题