Meine selbständige Javascript-Studie hat mich schließlich zum Lesen von Bibliotheken geführt, wo ich das folgende Snippet fand (abgeschnitten für die Kürze). Ich benutze Firefox mit Firebug auf einem Windows Apache Server (XAMPP).Welchen Zweck erfüllt das? IIFE Zuordnung zu var in Snap.svg.js
Ich dachte, das Snippet unten würde genügen, aber wenn jemand es braucht, kann die gesamte Bibliothek finden Sie hier: snap.svg.js on github
var Snap = (function(root) {
Snap.version = "0.4.0";
function Snap(w, h) { \t // can be either width, height OR
\t if (w) {
\t \t if (w.nodeType) { // deterimines if parameter is a dom element
\t \t \t return wrap(w);
\t \t }
\t \t if (is(w, "array") && Snap.set) { // deterimines if parameter is an array
\t \t \t return Snap.set.apply(Snap, w);
\t \t }
\t \t if (w instanceof Element) { // deterimines if parameter is a Snap.Element
\t \t \t return w;
\t \t }
\t \t if (h == null) { // by elimination determines if parameter is a dom element id.
\t \t \t w = glob.doc.querySelector(String(w));
\t \t \t return wrap(w);
\t \t }
\t }
<numerous public and private properties and methods> \t
.
.
.
glob.win.Snap = Snap;
return Snap;
}(window || this));
Firebug zeigt das Snap-Objekt im Fenster Kontext vor Instanziieren beliebige Benutzerobjekte. Ich habe mich gefragt, welcher Mechanismus das Snap-Objekt in das DOM injiziert hat. Da fiel mir der "var Snap" auf. Anfangs dachte ich, das war es. Aber da es die App nicht kaputt machte, als ich den Variablennamen änderte oder sogar löschte, wurde ich verwirrt.
Weitere Untersuchungen führten zu der Entdeckung am Ende des Lebens ... speziell "glob.win.Snap = Snap". Da "Fenster" in das Leben übertragen wird, scheint es das zu sein, was tatsächlich das Snap-Objekt in dem Fenster erzeugt. Das Ändern des Namens in glob.win.Snappy hat dies bestätigt.
Ich lerne immer noch so bitte korrigieren Sie mich, wenn ich falsch liege. Ich versuche zu verstehen, was mit dieser Bibliothek passiert. Es scheint, dass die Funktion Snap() in den Fensterkontext über die glob.win.Snap-Zuweisung eingefügt wird. Ich sehe nicht, dass die "var Snap" an der Spitze oder die "Return Snap" nichts tun. In der Tat kann ich sie ausgliedern und alles scheint gut zu funktionieren. Also, meine erste Frage: Haben diese beiden Linien eine Funktion, die ich nicht sehe?
Eine zweite Frage ist: Worauf bezieht sich der "this" Fallback-Parameter? Mein begrenztes Verständnis von Snap ist, dass es immer innerhalb des Fenster-Namespace verwendet wird, also wäre "das" nicht immer das Fenster?
Gerade wenn ich denke, dass ich den Paradigmenwechsel von der klassischen zur prototypischen Sprache beginne, stoße ich auf Code wie diesen und er setzt mich zurück. Ich würde wirklich eine Einsicht schätzen.