比方說,我有以下對象:這會複製對象還是添加對它的引用?
var lol = {
section: {},
other: {foo: 'bar', foob: 'baz'}
};
現在,如果我做了以下內容:
lol.section.other = lol.other;
將基準進行鏈接section.other
到other
或將整個other
對象被複制並放置在section
?
比方說,我有以下對象:這會複製對象還是添加對它的引用?
var lol = {
section: {},
other: {foo: 'bar', foob: 'baz'}
};
現在,如果我做了以下內容:
lol.section.other = lol.other;
將基準進行鏈接section.other
到other
或將整個other
對象被複制並放置在section
?
您正在創建對同一個對象的兩個引用。
Javascript對象是從來沒有隱式複製。
耶!完美:D –
是的,如果你有興趣,jQuery有一個方便的方法,$ .extend(),它可以讓你深入克隆對象(通過傳遞真正的第一個參數)。 http://api.jquery.com/jQuery.extend/ – InfinitiesLoop
您可以通過創建一個新對象並添加鍵/值來模仿複製行爲,也許在一個循環中? – dizas
與其他OO語言一樣,JavaScript也會通過引用傳遞和指定對象,因此,您只會創建對現有對象的新引用。
JavaScript從其他OO語言中脫離出來的地方是繼承和封裝。所以在這些領域要謹慎。
正如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/。
你爲什麼不簡單地通過一個引用來添加一個屬性來測試它,看看它是否可以通過其他引用? – user113716