Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Uso do bind()

Não entendi muito bem o bind(). Ele só executa a função do objeto fora dele?

3 respostas

A função bind() cria uma nova função vinculada (bound function). Uma função vinculada é um objeto de função exótico (termo da ECMAScript 2015) que encapsula o objeto de função original. Chamar uma função vinculada geralmente resulta na execução de sua função encapsulada.

solução!

Fala, Daniel!

  1. Aqui, criei um objeto com o método "info" e como este método foi criado dentro do escopo do objeto , o "this", dentro do método irá sempre se referência ao objeto em si.
 let pessoa = {

 nome : "Ricardo",
 idade : 37,
 info : function(){
 return `Nome: ${this.nome}, idade:${this.idade}`

 }
  1. Lembre que podemos guardar funções em variáveis pela técnica de wrapper , flexibilizando o seu uso, por exemplo:
let  infoCarro  =  function (marca , modelo){

      console.log(`O carro é da marca: ${marca} , modelo:${modelo}`);
}


console.log(infoCarro("fiat", "500"));
  1. Se formos utilizar esta técnica em um método de objeto , sem invocar o método, iremos extrair a função método do contexto do mesmo, pois a variável cuja atribuição foi feita não está no escopo no objeto.
 let pessoa = {

 nome : "Ricardo",
 idade : 37,
 info : function(){
 return `Nome: ${this.nome}, idade:${this.idade}`

 }

 // técnica de wrapper

 let infoPessoa = pessoa.info;   

 // Se for invocada as variáveis irão conter o valor de undefined, pois quando for invocada estará fora no contexto do objeto

 console.log( infoPessoa( ) );

     // Nome: undefined, idade: undefined

*OBS : Lembre que aqui estamos atribuindo a função sem invocá-las. E para invocar uma função precisamos colocar os parênteses no final *

  1. Para evitar que o método saia do escopo do objeto é que usamos o método bind(), que é exclusivo para funções.
let pessoa = {

    nome : "Ricardo",
    idade : 37,

    info : function(){

         return `Nome: ${this.nome}, idade:${this.idade}`
    }
}


let infoPessoa = pessoa.info.bind(pessoa);

console.log( infoPessoa() );

Espero ter te ajudado!

Entendi, muito obrigado Carlos e Ricardo pela ajuda! Depois dessas explicações eu testei mais um pouco e fez mais sentido.