Strata kontextu v kóde metódy v OOP v JavaScripte
Pri použití zdrojového kódu metódy triedy môže dôjsť k strate kontextu. Pozrime sa na príklad. Majme nasledujúcu triedu:
class User {
#name;
constructor(name) {
this.#name = name;
}
getName() {
return this.#name;
}
}
Vytvorme objekt tejto triedy:
let user = new User('john');
Zapíšme kód metódy do premennej:
let func = user.getName;
V momente zápisu metódy do premennej
sa kontext stratil. Teraz this
vnútri kódu metódy nebude ukazovať
na objekt triedy. Skontrolujme, zavolajme
našu funkciu:
console.log(func()); // chyba
Na vyriešenie problému je možné priviazať
kontext k funkcii, napríklad
cez bind:
func = func.bind(user);
console.log(func()); // funguje