Dobrze rozumiem JavaScript, poza tym, że nie mogę znaleźć dobrego sposobu na ustawienie zmiennej „this”. Rozważać:
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
Czy można to zrobić bez ostatnich 4 wierszy? To dość denerwujące ... Próbowałem przypisać anonimową funkcję, którą uważałem za piękną i sprytną, ale bezskutecznie:
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.
Oczywiście przekazanie zmiennej do myFunction jest opcją ... ale nie o to chodzi w tym pytaniu.
Dzięki.
javascript
variables
scope
this
Erik Philips
źródło
źródło
$.proxy(function, element)
tak, aby za każdym razem, gdy ta funkcja była wywoływana, była w kontekście elementu. api.jquery.com/jquery.proxy.bind()
Myślę, że szukasz
call
:To wywołuje
myFunction
zthis
ustawionym naobj
.Istnieje również nieco inna metoda
apply
, która przyjmuje parametry funkcji jako tablicę:źródło
Jeśli chcesz `` przechowywać ''
this
wartość w funkcji, aby móc ją później bezproblemowo wywołać (np. Gdy nie masz już dostępu do tej wartości), możesz tobind
zrobić (jednak nie we wszystkich przeglądarkach):źródło
bind
jest najwyraźniej dostępne w IE9 +, FF4 +, Safari 5.1.4+ i Chrome 7+ (źródło) . Możesz również wywołać bind bezpośrednio na anonimowej funkcji:var myFunction = function(){ /* this = something */ }.bind(something);
Moje poszukiwanie sposobu wiązania
this
doprowadziło mnie tutaj, więc publikuję swoje wyniki: W 'ECMAScript 2015' możemy również ustawić to leksykalnie za pomocą funkcji strzałek na.Zobacz: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions
Zamiast:
Teraz możemy:
źródło
Ustawienie
this
słowa kluczowego w javascript.Javascript ma 3 wbudowane metody do
this
wygodnego ustawiania słowa kluczowego. Wszystkie znajdują się naFunction.prototype
obiekcie, więc każda funkcja może z nich korzystać (ponieważ każda funkcja dziedziczy po tym prototypie poprzez dziedziczenie prototypowe). Te funkcje są następujące:Function.prototype.call()
: Ta funkcja przyjmuje obiekt, którego chcesz użyć jakothis
pierwszego argumentu. Wówczas pozostałe argumenty są odpowiednimi argumentami wywoływanej funkcji.Function.prototype.apply()
: Ta funkcja przyjmuje obiekt, którego chcesz użyć jakothis
pierwszego argumentu. Wtedy drugim argumentem jest tablica zawierająca wartości argumentów wywoływanej funkcji (pierwszy element tablicy to pierwszy argument funkcji, drugi argument tablicy to drugi argument funkcji itd.).Function.prototype.bind()
: Ta funkcja zwraca nową funkcję, która ma inną wartośćthis
. Pobiera obiekt, który chcesz ustawić jakothis
wartość jako pierwszy argument, a następnie zwraca nowy obiekt funkcji.Różnica między zadzwoń / zastosuj i połącz:
call
iapply
są podobne w tym, że natychmiast wywołują funkcję (z predefiniowaną wartościąthis
)bind
różni sięcall
iapply
tym, że ta funkcja zwraca nową funkcję z innym powiązaniemthis
wartości.Przykłady:
źródło