2016-04-01 5 views
0
var test = {}; 
test.k1 = {}; 
console.log(test); 
test.k1.k2 = 'apple'; 
console.log(test); 
test.k1.k2 = 'banana'; 

Erstes Protokoll:
Objekt k1: Objekt k2: "Banane"
WARUM? Ich erwarte, dass leeres Objekt k1 ... Banane 3 Linien definiert wird späterWie correcly neu definieren JavaScript-Objekte

Zweites Protokoll:
Objekt k1: Objekt k2: "Banane"
WARUM? Ich erwarte k2: Apfel ... Banane ist in der nächsten Zeile definiert

+2

Diese Antwort könnte Ihnen helfen. http://StackOverflow.com/Questions/23392111/consoles-log-async-or-sync – Lewis

+0

@Tresdin: Wir können damit als ein Original gehen, um dies als ein Betrogener zu markieren. Ich habe das Gefühl, dass es da draußen eine bessere Version gibt, aber es wird reichen. * Edit *: Ah, Quentin ist zuerst da. –

Antwort

2

Ihre Erwartung ist richtig, es ist die console.log, die Sie wirft. In einigen Umgebungen, insbesondere Browsern, ist console.log Logs eine Live-Referenz auf das Objekt, und wenn Sie es nach der Zeile erweitern, die Banane zuordnet, sehen Sie Banane statt Apfel, weil es es Ihnen zeigt, wie es war, als Sie expandierten es, nicht wenn du es eingeloggt hast.