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ă