A kontextus elvesztése a metóduskódban az OOP-ben JavaScriptben
Az osztály metódusának forráskódjának használatakor elveszhet a kontextus. Nézzük meg egy példán. Tegyük fel, hogy a következő osztályunk van:
class User {
#name;
constructor(name) {
this.#name = name;
}
getName() {
return this.#name;
}
}
Hozzunk létre egy objektumot ebből az osztályból:
let user = new User('john');
Írjuk a metódus kódját egy változóba:
let func = user.getName;
A metódus változóba írásakor
elveszett a kontextus. Most a this
a metóduskódban nem fog mutatni
az osztály objektumára. Ellenőrizzük, hívjuk meg
a függvényünket:
console.log(func()); // hiba
A probléma megoldásához köthetjük
a kontextust a függvényhez, például
a bind segítségével:
func = func.bind(user);
console.log(func()); // működik