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:
javascriptclass User {
#name;
constructor(name) {
this.#name = name;
}
getName() {
return this.#name;
}
}
Vytvořme objekt této třídy:
javascriptlet user = new User('john');
Zapišme kód metody do proměnné:
javascriptlet 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:
javascriptconsole.log(func()); // chyba
K vyřešení problému lze navázat
kontext na funkci, například
pomocí bind:
javascriptfunc = func.bind(user);
console.log(func()); // funguje