2014-09-23 39 views
2

我不會經常被困難,但我現在只是失去了單詞。JavaScript對象行爲

使用Chrome 37.0.2062.120米

爲什麼我的console.log();是報告這些結果有人能解釋一下嗎?

JS代碼

var some_obj = {min:1}; 

var another_obj = {}; 

console.log(some_obj); 

another_obj['sometarget'] = some_obj; // <- What is this sorcery?!?!? 
another_obj['sometarget']['required'] = true; 

console.log(some_obj); 

的console.log()輸出

Object {min: 1} 
Object {min: 1, required: true} 

的jsfiddle

http://jsfiddle.net/qrnaw7j2/1/

+0

你不期待什麼結果?你難住的驚喜是什麼? – 2014-09-23 19:23:37

+0

搜索會發現你有幾百個副本,這裏有一個 - > ** http://stackoverflow.com/questions/9437981/object-pass-by-reference** – adeneo 2014-09-23 19:28:08

回答

6

javascript中的對象通過引用共享。因此some_objanother_obj['sometarget']指向內存中的相同位置。

當你在其中任何一箇中設置了['required'] = true;時,它們都會被更新。

+0

JavaScript中的對象不會被引用傳遞! – adeneo 2014-09-23 19:28:32

+0

指向對象的指針不是,但對象本身是,因爲它們在內存中共享相同的位置 - 它們實際上指向同一個對象。所以我想這取決於符號:) – 2014-09-23 19:33:47

+1

它通常被稱爲「引用的副本」或「引用樣」,JavaScript沒有指針,也沒有通過真正的參考。 – adeneo 2014-09-23 21:32:45