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ă:
javascriptclass User {
#name;
constructor(name) {
this.#name = name;
}
getName() {
return this.#name;
}
}
Să creăm un obiect al acestei clase:
javascriptlet user = new User('john');
Să înregistrăm codul metodei într-o variabilă:
javascriptlet 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ă:
javascriptconsole.log(func()); // eroare
Pentru a rezolva problema, putem lega
contextul la funcție, de exemplu,
prin bind:
javascriptfunc = func.bind(user);
console.log(func()); // funcționează