Utrata kontekstu w kodzie metody w OOP w JavaScript
Przy użyciu oryginalnego kodu metody klasy kontekst może zostać utracony. Spójrzmy na przykład. Załóżmy, że mamy następującą klasę:
class User {
#name;
constructor(name) {
this.#name = name;
}
getName() {
return this.#name;
}
}
Stwórzmy obiekt tej klasy:
let user = new User('john');
Zapiszmy kod metody w zmiennej:
let func = user.getName;
W momencie zapisania metody do zmiennej
kontekst został utracony. Teraz this
wewnątrz kodu metody nie będzie wskazywać
na obiekt klasy. Sprawdźmy, wywołajmy
naszą funkcję:
console.log(func()); // błąd
Aby rozwiązać problem, można powiązać
kontekst z funkcją, na przykład
przez bind:
func = func.bind(user);
console.log(func()); // działa