【发布时间】:2020-10-08 13:37:26
【问题描述】:
我无法让计时器调用我的类方法。这工作正常:
MyInput = class {
constructor(params) {
let input = params.input;
input.addEventListener('focus', this.setTimer);
}
setTimer() {
this.timer = window.setInterval(() => {
console.log('yay');
}, 300);
}
};
但是这个:
MyInput = class {
constructor(params) {
let input = params.input;
input.addEventListener('focus', this.setTimer);
}
setTimer() {
this.timer = window.setInterval(this.lookupOptions, 300);
}
lookupOptions() {
console.log('yay');
}
};
不调用lookupOptions 方法,而是我在浏览器中的开发工具每 300 毫秒停止一次调试器(检查不同的值 - 始终与计时器同步)。过了一会儿,它打开了一些奇怪的文件VM[number],编号不同。我不知道为什么它不起作用。当我以同样的方式在课堂外使用计时器时,它工作正常,调用类方法似乎有些问题,但我无法弄清楚问题可能是什么。你能帮忙吗?
【问题讨论】:
-
window.setInterval(this.lookupOptions.bind(this), 300);
-
@enno.void Uncaught TypeError: Cannot read property 'bind' of undefined
-
使用箭头函数将实例保留为上下文:
input.addEventListener("focus", e => this.setTimer(e));和this.timer = window.setInterval(() => this.lookupOptions(), 300);
标签: javascript class ecmascript-6 timer