Javascript: Verhalten von {}

Ich hatte kein Verständnis für den Unterschied zwischen der Intialisierung einer Variablen mit {} und einer benannten Funktion mit new Schlüsselwort. Ich meine, welche Praxis sollte ich verwenden, um eine Definition eines Objekts zu geben. Was ist genauer und für welchen Fall?

Dann habe ich ein kleines Beispiel gemacht, um beide Praktiken zu testen. Und ich fand einen ganz einfachen Unterschied. Wenn Sie eine Variable mit {} intialisiert haben, ist diese Variable die einzige Referenz für diese Objektdefinition, die in {} . {} Selbst hat keinen Namen, also kann es nicht aufgerufen werden, mit neuem zu initialisieren. Nur eine Referenz ist verfügbar, um es zu bekommen.

So scheint es, dass wir einfach ein Singleton-Muster auf Objekte mit {} implementieren können. Was ich sehe, kann man nicht mehr als eine Instanz mit {} nicht einmal können Sie Clone anwenden, wenn Sie tun, erhalten Sie nur eine Referenz dieses Objekts.

Bin ich ein korrektes Verhalten von {}?

 var A = { B : 0 }; // A is an object? document.write("A is an " + typeof A); 

Lasst uns versuchen, das Objekt A zu klonen

 var objectOfA = new Object(A); objectOfA.B = 1; //Such operation is not allowed! //var objectOfA = new A(); var referenceOfA = A; referenceOfA.B = -1; document.write("AB: " + AB); document.write("<br/>"); 

Die obige referenceOfA.B enthält eine Referenz von Objekt A , so dass der Wert von referenceOfA.B sicherlich in AB reflektiert wird.

 document.write("referenceOfA.B: " + referenceOfA.B); document.write("<br/>"); 

Wenn es erfolgreich geklont wurde, sollte objectOfA den Wert 1 halten

 document.write("objectOfA.B: " + objectOfA.B); document.write("<br/>"); 

Hier sind die Ergebnisse:

A ist ein Gegenstand

AB: -1

ReferenzOfA.B: -1

ObjectOfA.B: -1

3 Solutions collect form web for “Javascript: Verhalten von {}”

Dies kann von Nutzen sein, Auszug:

 CatNames.instance = null; // Will contain the one and only instance of the class // This function ensures that I always use the same instance of the object CatNames.getInstance = function() { if (CatNames.instance == null) { CatNames.instance = new CatNames(); } return CatNames.instance; } 

Anmerkung: Du sollst nicht Singletons klonen.

A ist schon ein Objekt, so dass new Object(A) einfach zurückkehrt. Sie können dies beweisen, indem Sie laufen

 var c = {}; alert(c === new Object(c)); 

So ist kein Klonen los.

Was versuchst du eigentlich zu tun und was hat das Singleton-Muster mit diesem Klonengeschäft zu tun?

Für das Klonen von Objekten müssen Sie ein bisschen mehr Arbeit machen. Etwas wie unten.

 var a = { val:1, clone : function(){ return {val: a.val, clone : a.clone} } }; var b = a.clone(); b.val = 2; console.log(a); console.log(b); 

Jetzt kannst du ein Objekt klonen und es ändern. Wenn du komplexere Objekte klonen möchtest, könntest du hier eine rekursive Funktion schreiben.

Sie können diese Objektliterale entweder als statische Klassen oder als Objekte mit Schlüssel / Wert-Paaren verwenden.

Wenn Sie nicht statische Klassen (Art von) verwenden möchten, verwenden Sie Folgendes:

 var MyClass = new function(){} MyClass.prototype = { val : 1 }; var a = new MyClass(); 

Hoffe das hilft.

Lassen Sie uns Javascript Schönheit und nützlich machen.