2010-03-19 3 views
5

Wenn wir uns die neuesten jQuery Quelle bei http://code.jquery.com/jquery-latest.js betrachten, sehen wir folgendes:Warum macht jQuery das in seiner Konstruktorfunktion Implementierung?

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 des neuen Keywords in Javascript ist im Wesentlichen geht JavaScript die Funktion ein leeres Objekt {} und setzt die Funktion Material auf ihm über this.blah.

Auch von meinem Verständnis new unterscheidet sich von .call/.apply etc .. darin, dass das Rückkehrobjekt hat auch den Prototyp auf das der Funktion festgelegt. Daher sollte der Rückgabewert einen Prototyp haben, der der gleiche ist wie jQuery.prototype.init.prototype (oder jQuery.fn.init.prototype). Allerdings, was ich sehe, ist sein Prototyp auf jQuery.prototype so alle verfügbaren Befehle gesetzt, um am Set zu arbeiten.

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

Antwort

1

Wenn Sie einen tieferen Einblick in jQuery's code, werden Sie diese Zeile bemerken:

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

Diese für die Zwecke der Lesbarkeit/Struktur ist so der Konstruktor kann seine eigene Methode haben.

Es gibt hier keine wirkliche "Magie", nur Standard-JavaScript, wenn auch in einer etwas weniger gebräuchlichen Art und Weise. Es ist nützlich in jQuery's Fall, da die Bibliothek ziemlich lang ist und dies eine gute Struktur/Lesbarkeit hinzufügt.

0

In dieser Quelldatei, Suche nach der Zeichenfolge „Geben Sie die init-Funktion den jQuery-Prototyp für spätere Instanziierung“ :-)

Der Code setzt den prototype Bezug von jQuery.fn.init-jQuery.prototype (die die gleichen wie jQuery.fn I denken).

Verwandte Themen