Eu pensei que isso seria algo que eu poderia facilmente pesquisar no Google, mas talvez eu não esteja fazendo a pergunta certa ...
Como definir o que "isso" se refere em uma determinada função javascript?
por exemplo, como na maioria das funções do jQuery, como:
$(selector).each(function() {
//$(this) gives me access to whatever selector we're on
});
Como escrevo / chamo minhas próprias funções independentes que possuem uma referência "this" apropriada quando chamada? Eu uso o jQuery; portanto, se houver uma maneira específica de fazê-lo, isso seria o ideal.
javascript
jquery
scope
this
user126715
fonte
fonte
$.proxy
Respostas:
Javascripts
.call()
e.apply()
métodos permitem definir o contexto de uma função.Agora você pode ligar para:
O que alertaria
FOO
. Ao contrário, a passagemobj_b
alertariaBAR!!
. A diferença entre.call()
e.apply()
é que.call()
leva uma lista separada por vírgula se você estiver passando argumentos para sua função e.apply()
precisa de uma matriz.Portanto, você pode facilmente escrever uma função
hook
usando oapply()
método Por exemplo, queremos adicionar um recurso ao.css()
método jQuerys . Podemos armazenar a referência da função original, substituir a função pelo código personalizado e chamar a função armazenada.Como o
arguments
objeto mágico é um array como um objeto, podemos apenas passá-lo paraapply()
. Dessa forma, garantimos que todos os parâmetros sejam passados para a função original.fonte
obj_a
, por exemplo, poderá criar uma cópia delavar boud_myfunc = myfunc.bind(obj_a)
e simplesmente chamarbound_myfunc()
conforme necessário.Use
function.call
:Onde
that
está o objeto que você deseja quethis
a função esteja.fonte
function
é uma palavra-chave reservada; considere atualizar sua resposta para incluir uma função nomeada, poisfunction.call(...)
não é JavaScript válido.O jQuery usa um
.call(...)
método para atribuir o nó atual àthis
função que você passa como parâmetro.EDITAR:
Não tenha medo de olhar dentro do código do jQuery quando tiver alguma dúvida, está tudo em Javascript claro e bem documentado.
ou seja: a resposta a esta pergunta está na linha 574,
callback.call( object[ name ], name, object[ name ] ) === false
fonte
Você pode usar a função de ligação para definir o contexto de
this
dentro de uma função.fonte
Outro exemplo básico:
Não está funcionando:
Trabalhando:
Então, basicamente: basta adicionar .bind (this) à sua função
fonte