Pérdida de contexto en el código de un método en POO en JavaScript
Al usar el código fuente de un método de clase, el contexto puede perderse. Veamos un ejemplo. Supongamos que tenemos la siguiente clase:
class User {
#name;
constructor(name) {
this.#name = name;
}
getName() {
return this.#name;
}
}
Creemos un objeto de esta clase:
let user = new User('john');
Escribamos el código del método en una variable:
let func = user.getName;
En el momento de escribir el método en la variable,
el contexto se perdió. Ahora this
dentro del código del método no apuntará
al objeto de la clase. Comprobemos, llamemos
a nuestra función:
console.log(func()); // error
Para resolver el problema, se puede vincular
el contexto a la función, por ejemplo,
a través de bind:
func = func.bind(user);
console.log(func()); // funciona