Um zu verstehen, läuft was $('#test1').plugin.fun();
tut, Wir müssen uns ansehen, wie this
innerhalb von JavaScript-Funktionen gesetzt ist. Wir beginnen mit der Theorie und kehren dann zu Ihrem Plug-in zurück.
In JavaScript ist this
vollständig durch definiert, wie eine Funktion heißt. Die gängigste Methode ist es, als ein Nebenprodukt zu setzen, die Funktion von einer Objekteigenschaft Aufruf:
var foo = {
msg: "I'm foo!",
bar: function() {
alert(this.msg);
}
};
foo.bar(); // alerts "I'm foo!"
Diese Linie foo.bar();
hat drei verschiedene Dinge:
- Es ruft die
bar
Eigenschaft aus dem foo
Objekt.
- Es ruft die Funktion, die Eigenschaft verweist.
- Es tut # 2 so, dass sich
this
auf foo
bezieht.
:
So im Aufruf
$('#test1').plugin.fun();
... this
innerhalb fun
plugin
sein wird, weil wir fun
über eine Eigenschaft auf plugin
sind telefonisch unter (Mehr hier Mythical Methods.).
Sie könnten die von jQuery UI verwendeten Mechanismen verwenden, bei denen "Methoden" des Plug-Ins über eine Hauptfunktion mit den Namen als Strings verfügbar sein sollen. Zum Beispiel auf einer jQuery UI Draggable
Instanz können Sie Methoden wie folgt aufrufen:
$('#test1').draggable('disable');
ihre Draggable
documentation für weitere Beispiele sehen, aber im Grunde Ihre Anrufe würde wie folgt aussehen:
$('#test1').plugin('fun');
Mehr über Funktionsaufrufe:
Es gibt eine andere Möglichkeit, this
beim Aufruf einer Funktion zu setzen: Durch die.210 und apply
Funktionen auf die Funktion Beispiel:
var f = function() {
alert(this.msg);
};
var foo = {
msg: "I'm foo!"
};
f.call(foo); // alerts "I'm foo!"
f.apply(foo); // alerts "I'm foo!" too
call
und apply
Aufruf einer Funktion, die this
Wert auf das erste Argument Einstellung, die Sie in ihnen übergeben. Der Unterschied zwischen call
und apply
besteht darin, wie Sie Argumente an die Zielfunktion übergeben. Mit call
fügen Sie einfach weitere Argumente zur call
-Funktion hinzu; Mit apply
geben Sie ein Array von Argumenten als zweites Argument an apply
.Beispiele:
function f(arg1, arg2) {
alert(this.msg + " (" + arg1 + ", " + arg2 + ")");
}
var foo = {
msg: "I'm foo!";
};
f.call(foo, "one", "two"); // Alerts "I'm foo! (one, two)"
// ^-- "one" and "two" are discrete arguments
f.apply(foo, ["one", "two"]); // Alerts the same thing
// ^------------^-- "one" and "two" are in an array
Jetzt ist es klarer für mich, thnx Guffa. – Erroid
* "Die' Spaß'-Funktion hat keine direkte Beziehung zu dem Objekt, das Sie im Aufruf verwenden, also wird dies nur das 'Fenster'-Objekt sein. "* Nein, es wird die' plugin'-Funktion sein Objekt, weil er über eine Eigenschaft auf 'plugin'' fun' nennt. Nicht dass das hilfreicher ist, es bringt ihm immer noch nicht die jQuery-Instanz. (Hatte diese Antwort nicht schon vorher gesehen; jemand hat gerade meine Antwort geupdated, was mich dazu gebracht hat, mich zu fragen, was die Frage war und wieder vorbei zu schauen.) –