Konteksti kaotamine meetodi koodis OOP-s JavaScriptis
Klassi meetodi lähtekoodi kasutamisel võib kontekst kaduda. Vaatame näidet. Olgem meil järgmine klass:
javascriptclass User {
#name;
constructor(name) {
this.#name = name;
}
getName() {
return this.#name;
}
}
Loome selle klassi objekti:
javascriptlet user = new User('john');
Kirjutame meetodi koodi muutujasse:
javascriptlet func = user.getName;
Meetodi muutujasse kirjutamise hetkel
kontekst kaob. Nüüd ei osuta this
meetodi koodi sees enam
klassi objektile. Kontrollime,
käivitame oma funktsiooni:
javascriptconsole.log(func()); // viga
Probleemi lahendamiseks saab siduda
konteksti funktsiooniga, näiteks
läbi bind:
javascriptfunc = func.bind(user);
console.log(func()); // töötab