Perte de contexte dans le code d'une méthode en POO en JavaScript
Lors de l'utilisation du code source d'une méthode de classe, le contexte peut être perdu. Regardons un exemple. Supposons que nous ayons la classe suivante :
class User {
#name;
constructor(name) {
this.#name = name;
}
getName() {
return this.#name;
}
}
Créons un objet de cette classe :
let user = new User('john');
Enregistrons le code de la méthode dans une variable :
let func = user.getName;
C'est au moment de l'enregistrement de la méthode dans la variable
que le contexte s'est perdu. Maintenant, this
à l'intérieur du code de la méthode ne pointera pas
vers l'objet de la classe. Vérifions, appelons
notre fonction :
console.log(func()); // erreur
Pour résoudre le problème, on peut lier
le contexte à la fonction, par exemple,
via bind :
func = func.bind(user);
console.log(func()); // fonctionne