Verlust des Kontexts im Methodencode in OOP in JavaScript
Bei der Verwendung des Quellcodes einer Klassenmethode kann der Kontext verloren gehen. Schauen wir uns ein Beispiel an. Nehmen wir an, wir haben die folgende Klasse:
class User {
#name;
constructor(name) {
this.#name = name;
}
getName() {
return this.#name;
}
}
Erstellen wir ein Objekt dieser Klasse:
let user = new User('john');
Schreiben wir den Methodencode in eine Variable:
let func = user.getName;
Im Moment des Schreibens der Methode in die Variable
wurde der Kontext verloren. Jetzt wird this
innerhalb des Methodencodes nicht auf das
Klassenobjekt zeigen. Prüfen wir das, rufen wir
unsere Funktion auf:
console.log(func()); // Fehler
Um das Problem zu lösen, kann der
Kontext an die Funktion gebunden werden, zum Beispiel
über bind:
func = func.bind(user);
console.log(func()); // funktioniert