Pierderea contextului în codul metodei în OOP în JavaScript
Atunci când se folosește codul sursă al unei metode de clasă, contextul poate fi pierdut. Să ne uităm la un exemplu. Să presupunem că avem următoarea clasă:
class User {
#name;
constructor(name) {
this.#name = name;
}
getName() {
return this.#name;
}
}
Să creăm un obiect al acestei clase:
let user = new User('john');
Să înregistrăm codul metodei într-o variabilă:
let func = user.getName;
În momentul înregistrării metodei în variabilă,
contextul s-a pierdut. Acum this
în interiorul codului metodei nu va indica
către obiectul clasei. Să verificăm, să apelăm
funcția noastră:
console.log(func()); // eroare
Pentru a rezolva problema, putem lega
contextul la funcție, de exemplu,
prin bind:
func = func.bind(user);
console.log(func()); // funcționează