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:
javascriptclass User {
#name;
constructor(name) {
this.#name = name;
}
getName() {
return this.#name;
}
}
Creemos un objeto de esta clase:
javascriptlet user = new User('john');
Escribamos el código del método en una variable:
javascriptlet 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:
javascriptconsole.log(func()); // error
Para resolver el problema, se puede vincular
el contexto a la función, por ejemplo,
a través de bind:
javascriptfunc = func.bind(user);
console.log(func()); // funciona