Olá, Nickolas! Tudo bem?
Quando você escreve const exibir = user.exibirInfos;
, você está atribuindo à variável exibir a função exibirInfos
do objeto user, mas sem o contexto do objeto user. Isso acontece porque em JavaScript, quando uma função é atribuída a uma variável, ela perde o contexto original (neste caso, o objeto user).
Por isso, quando você tenta executar a função através da variável exibir (ou seja, exibir()
), o JavaScript não sabe a que o this
se refere e retorna undefined
.
Agora, quando você escreve const exibirTudo = exibir.bind(user);
, você está utilizando o método bind para atrelar a função exibirInfos
ao objeto user novamente. O método bind cria uma nova função que, quando chamada, tem seu this
definido com o valor passado, neste caso, o objeto user.
Então, quando você executa exibirTudo()
, a função exibirInfos
é executada com o contexto do objeto user, e o this
dentro da função se refere ao objeto user.
Para exemplificar, veja o código abaixo:
const user = {
nome: "Hanni",
idade: 19,
nascimento: "2004/10/06",
role: "singer",
ativo: true,
exibirInfos: function(){
console.log(this.nome,this.idade)
}
}
// Atribui a função exibirInfos à variável exibir, mas sem o contexto do objeto user
const exibir = user.exibirInfos;
// O this dentro da função exibir se refere ao objeto global, então retorna undefined
exibir(); // undefined
// Atribui a função exibirInfos à variável exibirTudo, com o contexto do objeto user
const exibirTudo = exibir.bind(user);
// O this dentro da função exibirTudo se refere ao objeto user, então retorna as informações do user
exibirTudo(); // Hanni 19
Espero ter ajudado e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.