2010-07-17 54 views
0

有很多關於「克隆」JavaScript對象的hubub。不過,據我所知,這是一個簡單的問題:默認情況下,哪些JavaScript對象不具有深克隆?

function clone(obj) { 
    return obj; 
} 

現在我認識到DOM對象不是克隆這種方式,但據我所知它的DOM是瀏覽器,而不是JavaScript的一部分的一部分。

什麼物體需要深度克隆,爲什麼?

+5

爲什麼問題社區wiki? – HoLyVieR 2010-07-17 01:56:13

+0

我很想看看它點擊它時做了什麼。它不需要。 – CoolAJ86 2010-07-18 00:00:31

回答

4

這只是返回一個參考完全相同的對象。它不是克隆什麼。

x = {}, 
c=function(o){return o}, 
y = c(x), 
result = (x === y) 

結果是true

+0

我想我應該更清楚。出於某種原因,我認爲它是在寫入時複製的,但我想這隻適用於原始值。 – CoolAJ86 2010-07-18 00:02:18

1

這是在某些方面通過/通過引用VS分配由值辯論。在大多數語言中,由於許多原因,對於任何非基本原因的參考文獻,默認情況下都是默認的,可能主要包括:

1)如果每個作業都可能導致大量內存/傳遞給函數會創建一個深層副本。

2)額外的樂趣,當你試圖改變事物的狀態...沒有更多this.x = 5如果this.x已經綁定。相反,如果我們是半幸運的話,可能類似this = this.clone({x: 5})

欲瞭解更多的背景,看看這兩個環節:

http://oranlooney.com/functional-javascript/

http://oranlooney.com/deep-copy-javascript/

我認爲,真正的問題可能應該是 - 爲什麼沒有一個很好的簡便方法Object提供了做深拷貝?

+0

正確執行深層複製可能會很難* - 請考慮處理循環引用,私人成員等。 – 2010-07-17 02:39:54

+1

更應該用語言來實現它的更多理由,而不是遺漏給使用它的遺留區。 ;) – 2010-07-17 02:49:13