如何深入克隆Javascript對象?如何在javascript中進行深度克隆
我知道有基於像JSON.parse(JSON.stringify(o))
和$.extend(true, {}, o)
框架的各種功能,但我不想使用這樣的框架。
什麼是最優雅或有效的方式來創建一個深層克隆。
我們關心像克隆數組這樣的邊緣情況。不打破原型鏈,處理自我參照。
我們不在乎支持DOM對象的複製等,因爲.cloneNode
因此存在。
由於我主要想使用深度克隆node.js
使用ES5功能的V8引擎是可以接受的。
[編輯]
之前有人建議讓我何況還有從對象prototypically繼承和克隆它創建副本之間的顯着差異。前者弄亂了原型鏈。
[更多編輯]
閱讀你的答案後,我來到了惱人的發現克隆整個物體是非常危險和困難的比賽。舉個例子性關閉對象的下列
var o = (function() {
var magic = 42;
var magicContainer = function() {
this.get = function() { return magic; };
this.set = function(i) { magic = i; };
}
return new magicContainer;
}());
var n = clone(o); // how to implement clone to support closures
有什麼辦法編寫克隆對象,具有在克隆時相同的狀態,但不能改變的o
的狀態,而在寫JS解析器的克隆功能JS。
應該沒有現實世界需要這樣的功能了。這僅僅是學術興趣。
它被標記之前重複,我看着http://stackoverflow.com/questions/122102/what-is-其他類型的數據結構中添加功能最有效的方法克隆一個JavaScript對象,並沒有找到任何答案,處理所有的邊緣情況。 – Raynos 2010-12-16 10:52:14