2010-10-19 8 views
7

Ich bin ein verwirrter Neuling. Ich las in einem Tutorial, das Sie wie so ein Javascript-Objekt erstellen:Was ist der Unterschied zwischen der Deklaration von JavaScript-Objekten mit var vs. with function?

function myObject() { 
    this.myProperty = "a string"; 
    this.myMethod = function() { 
     //Method code 
    } 
} 

Dann lese ich woanders, dass Sie ein Objekt wie so erstellen:

var myObject = { 
    myProperty: "a string", 
    myMethod : function() { 
     //Method code 
    } 
} 

Was ist die (nicht-subjektive) Differenz zwischen den beiden? Gibt es einen offiziellen richtigen und einen falschen Weg?

Antwort

5

Beide Deklarationen sind korrekt, aber sie haben unterschiedliche Semantik.

Die erste Art der Deklaration können Sie Instanzen Ihrer Objekte erstellen:

var t = new myObject(); 
// then use t 
t.myProperty = "some value"; 

var otherT = new myObject(); 
otherT.myProperty = "some other value"; 

Die zweite ist fast wie ein statisch Objekt:

myObject.myProperty = "some value"; 
+1

ich würde lieber die zweite ein * Singleton * ohne Konstruktor nennen. – galambalazs

+0

Danke für den Vergleich mit einem statischen Objekt. Das ist ein guter Weg, es zu erklären. – randomable

3

Hier ist ein direkter Vergleich .. .

function myObject() { 

Dies erklärt die Funktion wann JavaScript wird geparst ...

var myObject = function() { 

Dies deklariert die Funktion zur Laufzeit.

Wenn Sie die "var" -Methode verwenden, muss Ihre Funktion deklariert werden, bevor Sie sie verwenden ... versuchen Sie dieses Beispiel.

myFunction(); // Works 
myVarFunction(); // Boom 

var myVarFunction = function() { alert("Hi"); }; 

function myFunction() { alert("Hi"); }; 

Warum nutzen die „var“ Methode, wenn Sie mehr vorsichtig sein, es zu benutzen? Es hat alles mit dem Umfang zu tun ... Bereichsfunktionen werden als besser angesehen.

UPDATE: Und es gibt einige große Erklärungen hier:

var functionName = function() {} vs function functionName() {}

+0

Danke für diesen Link! In einer Antwort hieß es, dass var eine Reichweite hatte, aber eine andere Antwort korrigierte sie, indem sie sagte, dass beide Bereiche sind. Ich habe es ausprobiert, und es scheint mir, dass sowohl var als auch der Funktionsumfang in der gleichen Weise sind. Oder gibt es eine andere Bedingung, wo sie nicht sind? – randomable

+0

@Randomable - ja, Umfang in diesem Szenario scheint Verwirrung zu verursachen ... Ich bin vielleicht ein anderes Opfer. Überprüfen Sie dies: https://developer.mozilla.org/en/JavaScript/Reference/Functions_and_function_scope – Fenton

0

Der wesentliche Unterschied zwischen den beiden ist, dass eine lokale Variable ist und das andere ist global. "Var" definiert im Wesentlichen den Umfang der Variablen.

Wenn wir var einer Variablenwertzuweisung hinzufügen, stellt Javascript sicher, dass die Variable auf die zugewiesene Funktion beschränkt ist und nicht mit derselben Variablen in einer anderen Funktion kollidiert.

Wenn wir var nicht verwenden, dann wird es als globale Funktion deklariert, und die Wahrscheinlichkeit einer Kollision kann eintreten. Daher ist es immer ratsam, vor der Variablenwertvergabe "var" zu verwenden. Verwenden Sie bei Bedarf eine anonyme Funktion zum Schließen.

Verwandte Themen