Verlies van context in methodecode in OOP in JavaScript
Bij het gebruik van de broncode van een klasse methode kan de context verloren gaan. Laten we een voorbeeld bekijken. Stel we hebben de volgende klasse:
class User {
#name;
constructor(name) {
this.#name = name;
}
getName() {
return this.#name;
}
}
Laten we een object van deze klasse maken:
let user = new User('john');
Laten we de methodecode in een variabele opslaan:
let func = user.getName;
Op het moment dat de methode in een variabele werd opgeslagen,
is de context verloren gegaan. Nu zal this
in de methodecode niet meer verwijzen
naar het klasse object. Laten we het testen door
onze functie aan te roepen:
console.log(func()); // fout
Om het probleem op te lossen kan de context
aan de functie gebonden worden, bijvoorbeeld
via bind:
func = func.bind(user);
console.log(func()); // werkt