Para que serve o bind()
JavaScript?
javascript
function
bind
Sandeep Kumar
fonte
fonte
select = document.querySelector.bind(document)
this
, de outra forma, se referiria aowindow
objeto global. Comdocument.querySelector.bind(document)
, podemos garantir queselect
'sthis
refere-se adocument
, e não parawindow
. Alguém me corrija se eu não entendi isso, no entanto.Respostas:
Vincular cria uma nova função que força o
this
interior da função a ser o parâmetro passadobind()
.Aqui está um exemplo que mostra como usar
bind
para passar um método membro com o corretothis
:Que imprime:
Você também pode adicionar parâmetros extras após o 1º
this
parâmetro ( ) ebind
passará esses valores para a função original. Quaisquer parâmetros adicionais que você passar posteriormente para a função vinculada serão passados após os parâmetros associados:Que imprime:
Confira a função JavaScript bind para obter mais informações e exemplos interativos.
Atualização: o ECMAScript 2015 adiciona suporte para
=>
funções.=>
As funções são mais compactas e não alteram othis
ponteiro do escopo definido; portanto, talvez você não precise usá-lo com tantabind()
frequência. Por exemplo, se você deseja que uma funçãoButton
do primeiro exemplo ligue oclick
retorno de chamada a um evento DOM, todas as formas a seguir são válidas:Ou:
Ou:
fonte
var Note = React.createClass({ add: function(text){ ... }, render: function () { return <button onClick={this.add.bind(null, "New Note")}/> } }
quando clicar no botão, ele passará o texto de parâmetro "Nova Nota" para oadd
método.O uso mais simples de
bind()
é criar uma função que, não importa como seja chamada, é chamada com umthis
valor específico .Consulte este link para mais informações
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind
fonte
prototype
) que podem ser novos para iniciantes.vincular permite
Por exemplo, você tem a função de deduzir as taxas mensais do clube
Agora você deseja reutilizar esta função para um sócio do clube diferente. Observe que a taxa mensal varia de membro para membro.
Vamos imaginar que Rachel tenha um saldo de 500 e uma taxa de associação mensal de 90.
Agora, crie uma função que possa ser usada repetidamente para deduzir a taxa da conta dela todos os meses
Agora, a mesma função getMonthlyFee pode ser usada para outro membro com uma taxa de associação diferente. Por exemplo, Ross Geller tem um saldo de 250 e uma taxa mensal de 25
fonte
A partir dos documentos MDN sobre
Function.prototype.bind()
:Então, o que isso significa?!
Bem, vamos assumir uma função que se parece com isso:
Agora, vamos pegar um objeto que se parece com isso:
Podemos vincular nossa função ao nosso objeto assim:
Agora, podemos executar
Obj.log
em qualquer lugar do nosso código:Isso funciona, porque vinculamos o valor de
this
ao nosso objetoObj
.O que realmente interessa é quando você não apenas vincula um valor para
this
, mas também seu argumentoprop
:Agora podemos fazer isso:
Ao contrário de
Obj.log
, não temos que passarx
ouy
, porque passamos esses valores quando fizemos nossa ligação.fonte
Variáveis tem escopos locais e globais. Vamos supor que tenhamos duas variáveis com o mesmo nome. Um é definido globalmente e o outro é definido dentro de um fechamento de função e queremos obter o valor da variável que está dentro do fechamento de função. Nesse caso, usamos este método bind (). Por favor, veja o exemplo simples abaixo:
fonte
Resumo:
O
bind()
método pega um objeto como primeiro argumento e cria uma nova função. Quando a função é invocada, o valor dethis
no corpo da função será o objeto que foi passado como argumento nabind()
função.Como
this
funciona em JS de qualquer maneiraO valor de
this
em javascript é dependente sempre depende de qual objeto a função é chamada. O valor disso sempre se refere ao objeto à esquerda do ponto de onde a função é chamada . No caso do escopo global este éwindow
(ouglobal
nonodeJS
). Apenascall
,apply
ebind
pode alterar o presente de ligação diferente. Aqui está um exemplo para mostrar como essa palavra-chave funciona:Como o bind é usado?
O Bind pode ajudar a superar dificuldades com a
this
palavra - chave, tendo um objeto fixo ao qualthis
se referirá. Por exemplo:Uma vez que a função está vinculada a um
this
valor específico , podemos distribuí-la e até colocá-la nas propriedades de outros objetos. O valor dethis
permanecerá o mesmo.fonte
obj
é o objeto porque ele é deixado no ponto ewindow
é o objeto porque é uma abreviação parawindow.custFunc()
ewindow
é deixado no ponto foi muito perspicaz para mim.Vou explicar vincular teoricamente, bem como praticamente
bind em javascript é um método - Function.prototype.bind. bind é um método É chamado no protótipo de função. Este método cria uma função cujo corpo é semelhante à função na qual é chamado, mas o 'this' refere-se ao primeiro parâmetro passado ao método de ligação. Sua sintaxe é
Exemplo:--
fonte
O método bind () cria uma nova instância de função cujo valor está vinculado ao valor que foi passado para bind (). Por exemplo:
Aqui, uma nova função chamada objectSayColor () é criada a partir de sayColor () chamando bind () e passando o objeto o. A função objectSayColor () possui esse valor equivalente a o, portanto, chamar a função, mesmo como uma chamada global, resulta na exibição da string "azul".
Referência: Nicholas C. Zakas - JAVASCRIPT® PROFISSIONAL PARA DESENVOLVEDORES DA WEB
fonte
Criando uma nova função vinculando argumentos a valores
O
bind
método cria uma nova função a partir de outra função com um ou mais argumentos vinculados a valores específicos, incluindo othis
argumento implícito .Aplicação Parcial
Este é um exemplo de aplicação parcial . Normalmente, fornecemos uma função com todos os seus argumentos que produzem um valor. Isso é conhecido como aplicativo de função. Estamos aplicando a função a seus argumentos.
Uma função de ordem superior (HOF)
A aplicação parcial é um exemplo de uma função de ordem superior (HOF) porque produz uma nova função com um número menor de argumentos.
Vinculando vários argumentos
Você pode usar
bind
para transformar funções com vários argumentos em novas funções.Convertendo do método de instância para função estática
No caso de uso mais comum, quando chamado com um argumento, o
bind
método cria uma nova função que tem othis
valor vinculado a um valor específico. Com efeito, isso transforma um método de instância em um método estático.Implementando um retorno de chamada com estado
O exemplo a seguir mostra como o uso da ligação de
this
pode permitir que um método de objeto atue como um retorno de chamada que pode atualizar facilmente o estado de um objeto.fonte
Conforme mencionado,
Function.bind()
permite especificar o contexto em que a função será executada (ou seja, permite passar em qual objeto o objetothis
palavra chave será resolvida no corpo da função.Alguns métodos análogos da API do kit de ferramentas que executam um serviço semelhante:
jQuery.proxy ()
Dojo.hitch ()
fonte
fonte
Considere o Programa Simples listado abaixo,
fonte
A função bind cria uma nova função com o mesmo corpo da função que está chamando. É chamada com este argumento .por que usamos o bind fun. : quando toda vez que uma nova instância é criada e precisamos usar a primeira instância inicial, usamos bind fun. Não podemos substituir o bind fun.simply ele armazena o objeto inicial da classe.
fonte
Outro uso é que você pode passar a função vinculada como argumento para outra função que esteja operando em outro contexto de execução.
fonte
Exemplo simples
fonte
Método de ligação
Uma implementação de ligação pode ser algo assim:
A função de ligação pode receber qualquer número de argumentos e retornar uma nova função .
A nova função chamará a função original usando o
Function.prototype.apply
método JS .O
apply
método usará o primeiro argumento passado para a função de destino como seu contexto (this
), e o segundo argumento de matriz doapply
método será uma combinação do restante dos argumentos da função de destino, concatenando com os argumentos usados para chamar o retorno função (nessa ordem).Um exemplo pode ser algo assim:
fonte
Explicação simples:
bind () cria uma nova função, uma nova referência na função que ela retorna para você.
No parâmetro após esta palavra-chave, você passa o parâmetro que deseja pré-configurar. Na verdade, ele não é executado imediatamente, apenas se prepara para execução.
Você pode pré-configurar quantos parâmetros desejar.
Exemplo simples para entender o bind:
fonte
bind é uma função que está disponível no protótipo de script java, pois o nome sugere bind é usado para vincular sua chamada de função ao contexto com o qual você está lidando, por exemplo:
fonte