Ich dachte, das wäre etwas, das ich leicht googeln könnte, aber vielleicht stelle ich nicht die richtige Frage ...
Wie stelle ich ein, worauf sich "dies" in einer bestimmten Javascript-Funktion bezieht?
Zum Beispiel wie bei den meisten Funktionen von jQuery wie:
$(selector).each(function() {
//$(this) gives me access to whatever selector we're on
});
Wie schreibe / rufe ich meine eigenen Standalone-Funktionen auf, die beim Aufruf eine entsprechende "this" -Referenz haben? Ich verwende jQuery. Wenn es also eine jQuery-spezifische Methode gibt, wäre dies ideal.
javascript
jquery
scope
this
user126715
quelle
quelle
$.proxy
Antworten:
Mit Javascripts
.call()
und.apply()
Methoden können Sie den Kontext für eine Funktion festlegen .Jetzt können Sie anrufen:
Welches würde alarmieren
FOO
. Umgekehrtobj_b
würde das Vorbeigehen alarmierenBAR!!
. Der Unterschied zwischen.call()
und.apply()
besteht darin, dass.call()
eine durch Kommas getrennte Liste verwendet wird, wenn Sie Argumente an Ihre Funktion übergeben und.apply()
ein Array benötigen.Daher können Sie
hook
mit derapply()
Methode einfach eine Funktion schreiben . Zum Beispiel möchten wir der jQuerys-.css()
Methode ein Feature hinzufügen . Wir können die ursprüngliche Funktionsreferenz speichern, die Funktion mit benutzerdefiniertem Code überschreiben und die gespeicherte Funktion aufrufen.Da das magische
arguments
Objekt ein Array-ähnliches Objekt ist, können wir es einfach an übergebenapply()
. Auf diese Weise garantieren wir, dass alle Parameter an die ursprüngliche Funktion übergeben werden.quelle
obj_a
, können Sie beispielsweise eine Kopie davon erstellenvar boud_myfunc = myfunc.bind(obj_a)
undbound_myfunc()
bei Bedarf einfach aufrufen .Verwendung
function.call
:Wo
that
ist das Objekt, das Siethis
in der Funktion haben möchten ?quelle
function
ist ein reserviertes Schlüsselwort; Erwägen Sie, Ihre Antwort so zu aktualisieren, dass sie eine benannte Funktion enthält, dafunction.call(...)
JavaScript nicht gültig ist.jQuery verwendet eine
.call(...)
Methode, um den aktuellen Knotenthis
innerhalb der Funktion zuzuweisen, die Sie als Parameter übergeben.BEARBEITEN:
Haben Sie keine Angst, im Zweifelsfall in den Code von jQuery zu schauen. Alles ist in klarem und gut dokumentiertem Javascript.
dh: Die Antwort auf diese Frage ist um Zeile 574,
callback.call( object[ name ], name, object[ name ] ) === false
quelle
Sie können die Verwendung bind Funktion den Kontext setzen
this
innerhalb einer Funktion.quelle
Ein weiteres grundlegendes Beispiel:
Funktioniert nicht:
Arbeiten:
Also im Grunde: Fügen Sie einfach .bind (this) zu Ihrer Funktion hinzu
quelle