Konteksverlies in 'n metode se kode in OOP in JavaScript
Wanneer die bronkode van 'n klasmetode gebruik word, kan die konteks verlore gaan. Kom ons kyk na 'n voorbeeld. Laat ons die volgende klas hê:
class User {
#name;
constructor(name) {
this.#name = name;
}
getName() {
return this.#name;
}
}
Kom ons skep 'n objek van hierdie klas:
let user = new User('john');
Kom ons skryf die metode se kode in 'n veranderlike:
let func = user.getName;
Op die oomblik wanneer die metode in die veranderlike geskryf word,
het die konteks reeds verlore gegaan. Nou sal this
binne die metode se kode nie na die klasobjek wys nie.
Kom ons toets deur ons funksie te roep:
console.log(func()); // fout
Om die probleem op te los, kan jy die konteks aan die funksie bind,
bv. deur gebruik te maak van bind:
func = func.bind(user);
console.log(func()); // werk