5 Stimmen

Warum tut jQuery dies in seiner Konstruktorfunktionsimplementierung?

Wenn wir uns den neuesten jQuery-Quelltext ansehen unter http://code.jquery.com/jquery-latest.js sehen wir das Folgende:

var jQuery = function( selector, context ) {
    // The jQuery object is actually just the init constructor 'enhanced'
    return new jQuery.fn.init( selector, context );
}

Mein Verständnis der neuen Schlüsselwort in Javascript ist im Wesentlichen JavaScript übergibt die Funktion ein leeres Objekt {} und die Funktion setzt Dinge darauf über this.blah .

Auch nach meinem Verständnis new unterscheidet sich von .call / .apply usw., da der Prototyp des Rückgabeobjekts ebenfalls auf den der Funktion eingestellt ist. Der Rückgabewert sollte also einen Prototyp haben, der der gleiche ist wie jQuery.prototype.init.prototype (oder jQuery.fn.init.prototype ). Soweit ich sehe, ist der Prototyp jedoch auf jQuery.prototype also alle Befehle, die für die Arbeit am Set zur Verfügung stehen.

Warum ist das so? Was fehlt mir in meinem Verständnis?

1voto

Dan Herbert Punkte 94074

Wenn Sie sich näher mit Code von jQuery wird Ihnen diese Zeile auffallen:

// Give the init function the jQuery prototype for later instantiation
jQuery.fn.init.prototype = jQuery.fn;

Dies dient der Lesbarkeit/Strukturierung, damit der Konstruktor seine eigene Methode haben kann.

Hier wird keine wirkliche "Magie" betrieben, sondern nur Standard-JavaScript, wenn auch vielleicht in einer etwas weniger verbreiteten Form. Es ist nützlich im Fall von jQuery, da die Bibliothek ziemlich lang ist und dies eine gute Struktur/Lesbarkeit hinzufügt.

0voto

Pointy Punkte 387467

Suchen Sie in dieser Quelldatei nach der Zeichenfolge "Geben Sie der init-Funktion den jQuery-Prototyp für die spätere Instanziierung" :-)

Der Code setzt die prototype Hinweis auf jQuery.fn.init a jQuery.prototype (was dasselbe ist wie jQuery.fn glaube ich).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X