2011-09-27 62 views
0

比方說,我有以下對象:這會複製對象還是添加對它的引用?

var lol = { 
    section: {}, 
    other: {foo: 'bar', foob: 'baz'} 
}; 

現在,如果我做了以下內容:

lol.section.other = lol.other; 

將基準進行鏈接section.otherother或將整個other對象被複制並放置在section

+0

你爲什麼不簡單地通過一個引用來添加一個屬性來測試它,看看它是否可以通過其他引用? – user113716

回答

8

您正在創建對同一個對象的兩個引用。

Javascript對象是從來沒有隱式複製。

+0

耶!完美:D –

+0

是的,如果你有興趣,jQuery有一個方便的方法,$ .extend(),它可以讓你深入克隆對象(通過傳遞真正的第一個參數)。 http://api.jquery.com/jQuery.extend/ – InfinitiesLoop

+0

您可以通過創建一個新對象並添加鍵/值來模仿複製行爲,也許在一個循環中? – dizas

2

與其他OO語言一樣,JavaScript也會通過引用傳遞和指定對象,因此,您只會創建對現有對象的新引用。

JavaScript從其他OO語言中脫離出來的地方是繼承和封裝。所以在這些領域要謹慎。

1

正如SLaks所說,javascript將對象指定爲參考(不復制)。這很容易測試或看到自己:

var lol = { 
    section: {}, 
    other: {foo: 'bar', foob: 'baz'} 
}; 

lol.section.other = lol.other; 

lol.other.foo = 'test'; 
console.log(lol.section.other.foo); // will be 'test', not 'bar' 

你可以在這裏看到:http://jsfiddle.net/jfriend00/r73LH/

相關問題