この例では、誤って関数を呼び出して、結果に.bind
を使用しようとしています。あなたがbind
の一部としてfalse
引数を渡すところ正しい長い手のコードは(次のようになります。
:
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