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:
class User {
#name;
constructor(name) {
this.#name = name;
}
getName() {
return this.#name;
}
}
Creiamo un oggetto di questa classe:
let user = new User('john');
Assegniamo il codice del metodo a una variabile:
let 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:
console.log(func()); // errore
Per risolvere il problema, è possibile associare
il contesto alla funzione, ad esempio,
tramite bind:
func = func.bind(user);
console.log(func()); // funziona