Perda de contexto no código de método em POO em JavaScript
Ao usar o código original de um método de classe, o contexto pode ser perdido. Vamos ver um exemplo. Suponha que temos a seguinte classe:
class User {
#name;
constructor(name) {
this.#name = name;
}
getName() {
return this.#name;
}
}
Vamos criar um objeto desta classe:
let user = new User('john');
Vamos registrar o código do método em uma variável:
let func = user.getName;
No momento em que o método foi registrado na variável,
o contexto foi perdido. Agora this
dentro do código do método não irá apontar
para o objeto da classe. Vamos verificar, vamos chamar
nossa função:
console.log(func()); // erro
Para resolver o problema, você pode vincular
o contexto à função, por exemplo,
através de bind:
func = func.bind(user);
console.log(func()); // funciona