In Ihrem Beispiel rufen Sie die Funktion versehentlich auf und versuchen dann, das Ergebnis .bind
10 zu verwenden. Der richtige Lang Hand Code wäre die folgend (in dem Sie das false
Argument als Teil der bind
passieren:
class Example {
CheckIfCameraIsAvailable(forceCheck: boolean) {
alert(forceCheck);
}
run() {
setInterval(this.CheckIfCameraIsAvailable.bind(this, false), 2000);
}
}
const example = new Example();
example.run();
Die Kurz Hand Weg, um den lexikalischen Gültigkeitsbereich zu erhalten, ist eine Pfeil-Funktion:
class Example {
CheckIfCameraIsAvailable(forceCheck: boolean) {
alert(forceCheck);
}
run() {
setInterval(() => this.CheckIfCameraIsAvailable(false), 2000);
}
}
const example = new Example();
example.run();
Und das ist das Äquivalent einer Zwischenvariablen wie diese Einführung.
class Example {
CheckIfCameraIsAvailable(forceCheck: boolean) {
alert(forceCheck);
}
run() {
const _this = this;
setInterval(function() { _this.CheckIfCameraIsAvailable(false) }, 2000);
}
}
const example = new Example();
example.run();
Sie versuchen, das Ergebnis der Aufruf der Methode zu binden, nicht die Methode Warum nicht ein ar verwenden Zeilenfunktion 'setInterval (() => this.CheckIfCameraIsAvailable (false), 2 * 60 * 1000)'? – jonrsharpe
Warum wird der Fehler gelöst, wenn ich den Parameter (forceCheck: boolean) aus der Funktion entferne? – Ala
Weil dann vermutlich 'this.CheckIfCameraIsAvailable.bind (this)', ohne die Klammern, so * tatsächlich die Methode binden *. Wenn du 'this.CheckIfCameraIsAvailable(). Bind (this)' gemacht hast, hast du das gleiche Problem. Sie müssen ein Callable ohne Parameter an 'setInterval' übergeben. – jonrsharpe