JSON-Literale und Javascript-Objekte. ich bin verwirrt

8

Betrachten wir diesen Code:

%Vor%

Fragen

  1. Was sind die Unterschiede zwischen den drei Aufgaben?
  2. Überlappen sich die Objekte a, b und c genau?
  3. Wenn ja, warum? Wenn nein, warum?

Bitte fügen Sie Referenzen zu Ihren Antworten hinzu.

Demo .

    
Alberto De Caro 11.10.2012, 14:11
quelle

2 Antworten

7

a und b sind effektiv identisch (sie haben die gleichen Eigenschaften, mit den gleichen Werten, an den gleichen Stellen). c ist komplett anders. Sie können einen deutlichen Unterschied feststellen, wenn Sie die Objekte auf der Konsole protokollieren, statt begrenzte Informationen auf die Seite zu drucken:

c ist derjenige auf der rechten Seite. Es wurde ein Objekt ohne eigene Eigenschaften erstellt. Die von Ihnen angegebenen Eigenschaften befinden sich tatsächlich in prototype von c . Der Grund dafür ist, dass das erste Argument zu Object.create ist die prototype des zu erstellenden Objekts.

Beachten Sie, dass Sie % % verwenden können, um den gleichen Effekt zu erhalten - übergeben Sie einfach Object.create als erstes Argument:

%Vor%     
James Allardice 11.10.2012, 14:18
quelle
7

a und b führen zu "identischen" Objekten (genauso wie {a:1} abd {a:1} identisch sind).

JSON.parse analysiert die Eingabe-JSON Zeichenfolge und gibt den analysierten Wert aus. In diesem Fall ein Objekt.

c ist anders. Object.create erstellt ein neues Objekt, dessen Prototyp auf den ersten gesetzt ist Streit. Sie können überprüfen, ob c.__proto__.id gleich 1 ist (und in den ersten beiden Fällen nicht verfügbar ist).

Auf den ersten Blick ergeben alle drei Methoden das "gleiche" Objekt: Das Lesen der Eigenschaft id ergibt 1 in allen Fällen. Im dritten Fall wird dieses Ergebnis durch die Vererbung des Prototyps verursacht. Dies bietet eine mögliche Funktion :

%Vor%     
Rob W 11.10.2012 14:18
quelle

Tags und Links