2009-07-08 8 views
2

Ich sehe in jQuery etwas wie folgt aus:Javascript-Variablen, Was macht var x = a = {}?

jQuery.fn = jQuery.prototype = {} 

Warum dies getan wird, ist? Ist das nicht das Gleiche, wenn man jQuery.prototype = {} sagt? Ich bin mir nicht sicher, ob ich verstehe, was Resig hier leistet.

Antwort

13

Das gleiche wie:

jQuery.prototype = {} 
jQuery.fn = jQuery.prototype 

Meiner Meinung nach alle mehr klar in einer Linie mit macht, dass Ihr

+0

Vielen Dank. Das macht es wirklich klar. –

2

Die Aussage x = a = {} bedeutet den gleichen Wert für beide Variablen zuweisen, dass {} zu a zugewiesen ist, ist der x zugeordnet. So ist es gleich a = {}; x = a.

+0

Ja, aber in seinem Beispiel ist jQuery.fn bereits dieselbe Entität wie jQuery und jQuery.prototype. Das Fn ist nur eine Abkürzung für den Prototyp. – amischiefr

2

Eine Sache, zu wissen, dass in JavaScript aktivieren, jeder Ausdruck einen Rückgabewert hat, unabhängig davon, ob es irgendwelche Nebenwirkungen hat (Abtretungs)

Von rechts nach links, haben Sie die folgenden Aussagen:

(jQuery.fn = (jQuery.prototype = ({}))) 

den ersten Teil Auswertung gibt ein leeres Objekt: {}:

(jQuery.fn = (jQuery.prototype = {})) 

die zweite Anweisung ausgeführt und setzt jQuery.prototype in {} und es auswertet bis j Query.prototype, so dass der zweite Teil:

(jQuery.fn = jQuery.prototype) 

die jQuery.fn zu jQuery.prototype setzt, die dann ausgewertet wird:

jQuery.fn 

, die nichts tut.

+1

Die Auswertung des ersten Teils ergibt ein leeres Objekt (kein 'Array') - das kann eine wichtige Unterscheidung sein. – steamer25

+0

Eigentlich ist jQuery.fn = jQuery.prototype, nicht jQuery.fn = {}, da jQuery.fn und jQuery.prototype Aliasing sein sollen. –

+0

in Javascript Land sind nicht Arrays/Tabellen/Objekte die gleiche Sache? Es ist eine Weile her. Egal, ich habe meine Antwort aktualisiert. – FryGuy

3

Dies ist äquivalent zu:

jQuery.prototype = {} 
jQuery.fn = jQuery.prototype 

Mit anderen Worten jQuery.fn und jQuery.prototype beide auf dasselbe Objekt.