1
resposta

Bind()

Olá professor, tudo bem? Tenho uma dúvida... Não consigo entender porque usamos o bind() na hora de chamar funções por referências. Basicamente trocamos o contexto de execução da função? é só isso mesmo? É como se fizéssemos um apply() em js? No método render() o this se refere ao componente JSX e o this passado dentro do bind se refere a classe em si?

Obrigado.

1 resposta

É que no javascript sempre que chamados uma função a partir de um objeto esta função pode acessar o objeto a que ela pertence através da palavra chave 'this'

var person = {
    firstName: "John",
    lastName : "Doe",
    id       : 5566,
    fullName : function() {
        return this.firstName + " " + this.lastName;
    }
}

Porém se você chamar esse método sem ser pelo objeto, a função perde o acesso ao objeto que ela pertence, então 'this' acaba sendo 'undefined' , sendo assim temos que ligar artificialmente o método ao objeto que ela pertence, como no exemplo a seguir.

var person = {
    firstName: "John",
    lastName : "Doe",
    id       : 5566,
    fullName : function() {
        return this.firstName + " " + this.lastName;
    }
}

function executeFuncion(func, obj){
    if(obj){
            func = func.bind(obj);
       }
      return func();
}
let fullName = '';
fullName  = executeFuncion(person .fullName ); /* aqui da erro porque o this vai ser undefined*/
fullName  = executeFuncion(person .fullName, person ); /* aqui vai executar normalmente porque a palavra chave 'this' vai assumir o valor do objeto 'person'.

Segue um link para entender melhor o assunto

https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Function/bind