Eu tenho um bom entendimento de Javascript, exceto que não consigo descobrir uma boa maneira de definir a variável "this". Considerar:
var myFunction = function(){
alert(this.foo_variable);
}
var someObj = document.body; //using body as example object
someObj.foo_variable = "hi"; //set foo_variable so it alerts
var old_fn = someObj.fn; //store old value
someObj.fn = myFunction; //bind to someObj so "this" keyword works
someObj.fn();
someObj.fn = old_fn; //restore old value
Existe uma maneira de fazer isso sem as últimas 4 linhas? É um pouco chato ... Tentei vincular uma função anônima, que achei bonita e inteligente, mas sem sucesso:
var myFunction = function(){
alert(this.foo_variable);
}
var someObj = document.body; //using body as example object
someObj.foo_variable = "hi"; //set foo_variable so it alerts
someObj.(function(){ fn(); })(); //fail.
Obviamente, passar a variável para myFunction é uma opção ... mas esse não é o objetivo desta pergunta.
Obrigado.
javascript
variables
scope
this
Erik Philips
fonte
fonte
$.proxy(function, element)
lo para que, sempre que essa função for chamada, ela esteja no contexto do elemento. api.jquery.com/jquery.proxy.bind()
Eu acho que você está procurando
call
:Isso chama
myFunction
comthis
definido comoobj
.Há também o método ligeiramente diferente
apply
, que usa os parâmetros de função como uma matriz:fonte
Se você deseja 'armazenar' o
this
valor em uma função para que possa chamá-lo sem problemas mais tarde (por exemplo, quando você não tiver mais acesso a esse valor), poderábind
fazê-lo (embora não esteja disponível em todos os navegadores):fonte
bind
Aparentemente, o FYI está disponível no IE9 +, FF4 +, Safari 5.1.4+ e Chrome 7+ (fonte) . Você também pode chamar bind diretamente em uma função anônima:var myFunction = function(){ /* this = something */ }.bind(something);
Minha pesquisa sobre como ligar
this
me trouxe aqui, então estou postando minhas descobertas: No 'ECMAScript 2015', também podemos definir isso lexicamente usando as funções de seta para.Consulte: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions
Ao invés de:
Agora podemos fazer:
fonte
Definindo a
this
palavra - chave em javascript.O Javascript possui 3 métodos internos para definir a
this
palavra - chave de forma conveniente. Eles estão todos localizados noFunction.prototype
objeto para que todas as funções possam usá-los (já que todas as funções herdam deste protótipo por herança prototípica). Essas funções são as seguintes:Function.prototype.call()
: Esta função pega o objeto que você deseja usar comothis
primeiro argumento. O restante dos argumentos são os respectivos argumentos da função que é chamada.Function.prototype.apply()
: Esta função pega o objeto que você deseja usar comothis
primeiro argumento. Então o segundo argumento é uma matriz que contém os valores dos argumentos da função que é chamada (o primeiro elemento da matriz é o primeiro argumento da função, o segundo argumento da matriz é o segundo argumento da função etc.).Function.prototype.bind()
: Esta função retorna uma nova função que possui um valor diferente dethis
. Ele pega o objeto que você deseja definir comothis
valor como primeiro argumento e, em seguida, retorna um novo objeto de função.Diferença entre ligar / aplicar e ligar:
call
eapply
são semelhantes no fato de que eles chamam imediatamente a função (com um valor predefinido dethis
)bind
é diferentecall
eapply
no fato de que essa função retorna uma nova função com uma ligação diferente dothis
valor.Exemplos:
fonte