Perdita del contesto nel codice del metodo in OOP in JavaScript
Quando si utilizza il codice sorgente di un metodo di classe, il contesto può andare perso. Vediamo un esempio. Supponiamo di avere la seguente classe:
javascriptclass User {
#name;
constructor(name) {
this.#name = name;
}
getName() {
return this.#name;
}
}
Creiamo un oggetto di questa classe:
javascriptlet user = new User('john');
Assegniamo il codice del metodo a una variabile:
javascriptlet func = user.getName;
Nel momento in cui il metodo viene assegnato alla variabile,
il contesto si è perso. Ora this
all'interno del codice del metodo non punterà
all'oggetto della classe. Verifichiamolo, chiamiamo
la nostra funzione:
javascriptconsole.log(func()); // errore
Per risolvere il problema, è possibile associare
il contesto alla funzione, ad esempio,
tramite bind:
javascriptfunc = func.bind(user);
console.log(func()); // funziona