Ztráta kontextu v kódu metody v OOP v JavaScriptu
Při použití zdrojového kódu metody třídy může dojít ke ztrátě kontextu. Podívejme se na příklad. Předpokládejme, že máme následující třídu:
class User {
#name;
constructor(name) {
this.#name = name;
}
getName() {
return this.#name;
}
}
Vytvořme objekt této třídy:
let user = new User('john');
Zapišme kód metody do proměnné:
let func = user.getName;
V okamžiku zápisu metody do proměnné
došlo ke ztrátě kontextu. Nyní this
uvnitř kódu metody nebude ukazovat
na objekt třídy. Ověřme, zavolejme
naši funkci:
console.log(func()); // chyba
K vyřešení problému lze navázat
kontext na funkci, například
pomocí bind:
func = func.bind(user);
console.log(func()); // funguje