在您的示例中,您意外地调用该函数,然后尝试对结果使用.bind
。正确的长手代码将是如下(你传递false
参数为bind
的一部分:
class Example {
CheckIfCameraIsAvailable(forceCheck: boolean) {
alert(forceCheck);
}
run() {
setInterval(this.CheckIfCameraIsAvailable.bind(this, false), 2000);
}
}
const example = new Example();
example.run();
速记的方式来保持词汇范围是使用箭头功能:
class Example {
CheckIfCameraIsAvailable(forceCheck: boolean) {
alert(forceCheck);
}
run() {
setInterval(() => this.CheckIfCameraIsAvailable(false), 2000);
}
}
const example = new Example();
example.run();
这是引入这样一个中间变量相当于:
class Example {
CheckIfCameraIsAvailable(forceCheck: boolean) {
alert(forceCheck);
}
run() {
const _this = this;
setInterval(function() { _this.CheckIfCameraIsAvailable(false) }, 2000);
}
}
const example = new Example();
example.run();
你试图调用该方法的结果结合,而不是方法,为什么不使用的AR行函数'setInterval(()=> this.CheckIfCameraIsAvailable(false),2 * 60 * 1000)'? – jonrsharpe
当我从函数中删除(forceCheck:boolean)参数时,为什么错误会被解决? – Ala
因为假设你在做'this.CheckIfCameraIsAvailable.bind(this)',没有括号,所以*实际上绑定了方法*。如果你做了'this.CheckIfCameraIsAvailable()。bind(this)'你会遇到同样的问题。您需要将不带参数的可调用传递给'setInterval'。 – jonrsharpe