Ich habe ein ziemlich gutes Verständnis von Javascript, außer dass ich keine gute Möglichkeit finden kann, die Variable "this" festzulegen. Erwägen:
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
Gibt es eine Möglichkeit, dies ohne die letzten 4 Zeilen zu tun? Es ist ziemlich nervig ... Ich habe versucht, eine anonyme Funktion zu binden, die ich für schön und klug hielt, aber ohne Erfolg:
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.
Natürlich ist die Übergabe der Variablen an myFunction eine Option ... aber darum geht es bei dieser Frage nicht.
Vielen Dank.
javascript
variables
scope
this
Erik Philips
quelle
quelle
$.proxy(function, element)
so verwenden, dass es bei jedem Aufruf dieser Funktion im Kontext des Elements steht. api.jquery.com/jquery.proxy.bind()
Ich denke du suchst
call
:Dies ruft
myFunction
mitthis
set to aufobj
.Es gibt auch die etwas andere Methode
apply
, bei der die Funktionsparameter als Array verwendet werden:quelle
Wenn Sie den
this
Wert in einer Funktion speichern möchten, damit Sie ihn später nahtlos aufrufen können (z. B. wenn Sie nicht mehr auf diesen Wert zugreifen können), könnenbind
Sie dies (jedoch nicht in allen Browsern verfügbar):quelle
bind
ist anscheinend in IE9 +, FF4 +, Safari 5.1.4+ und Chrome 7+ (Quelle) verfügbar . Sie können bind auch direkt für eine anonyme Funktion aufrufen:var myFunction = function(){ /* this = something */ }.bind(something);
Meine Suche nach dem Binden
this
hat mich hierher gebracht, sodass ich meine Ergebnisse veröffentliche: In 'ECMAScript 2015' können wir dies auch lexikalisch mit Pfeilfunktionen auf einstellen.Siehe: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions
Anstatt:
Wir können jetzt tun:
quelle
Festlegen des
this
Schlüsselworts in Javascript.Javascript verfügt über 3 integrierte Methoden zum
this
bequemen Festlegen des Schlüsselworts. Sie befinden sich alle auf demFunction.prototype
Objekt, sodass jede Funktion sie verwenden kann (da jede Funktion über die prototypische Vererbung von diesem Prototyp erbt). Diese Funktionen sind die folgenden:Function.prototype.call()
: Diese Funktion verwendet das Objekt, das Siethis
als erstes Argument verwenden möchten . Der Rest der Argumente sind dann die jeweiligen Argumente der aufgerufenen Funktion.Function.prototype.apply()
: Diese Funktion verwendet das Objekt, das Siethis
als erstes Argument verwenden möchten . Dann ist das zweite Argument ein Array, das die Werte der Argumente der aufgerufenen Funktion enthält (erstes Element des Arrays ist erstes Argument der Funktion, zweites Argument des Arrays ist zweites Argument der Funktion usw.).Function.prototype.bind()
: Diese Funktion gibt eine neue Funktion zurück, die einen anderen Wert von hatthis
. Es nimmt das Objekt, das Sie alsthis
Wert festlegen möchten, als erstes Argument und gibt dann ein neues Funktionsobjekt zurück.Unterschied zwischen call / apply und bind:
call
undapply
ähneln sich darin, dass sie die Funktion sofort aufrufen (mit einem vordefinierten Wert vonthis
)bind
unterscheidet sich voncall
undapply
in der Tatsache, dass diese Funktion eine neue Funktion mit einer anderen Bindung desthis
Werts zurückgibt .Beispiele:
quelle