在您的示例中,您意外地調用該函數,然後嘗試對結果使用.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