Tap av kontekst i metodekode i OOP i JavaScript
Ved bruk av kildekoden til en klassemetode kan konteksten gå tapt. La oss se på et eksempel. La oss si at vi har følgende klasse:
class User {
#name;
constructor(name) {
this.#name = name;
}
getName() {
return this.#name;
}
}
La oss opprette et objekt av denne klassen:
let user = new User('john');
La oss skrive metodekoden til en variabel:
let func = user.getName;
I øyeblikket vi skrev metoden til variabelen
gikk konteksten tapt. Nå vil this
inni metodekoden ikke peke
på klasseobjektet. La oss sjekke, la oss kalle
vår funksjon:
console.log(func()); // feil
For å løse problemet kan vi binde
konteksten til funksjonen, for eksempel
via bind:
func = func.bind(user);
console.log(func()); // fungerer