實現深度複製

事實上,ES5新增的JSON對象提供的兩個方法也可以實現深度複製,分別是JSON.stringify()和JSON.parse();前者用來將對象轉成字符串,後者則把字符串轉換成對象。下面我們使用該方法來實現一個深度複製的函數:
function extendDeep(parent, child) {
var i,
proxy;
proxy = JSON.stringify(parent); //把parent對象轉換成字符串
proxy = JSON.parse(proxy) //把字符串轉換成對象,這是parent的一個副本
child = child || {};
for(i in proxy) {
if(proxy.hasOwnProperty(i)) {
child[i] = proxy[i];
}
}
proxy = null; //因爲proxy是中間對象,可以將它回收掉
return child;
}
下面是測試例子:
var dad = {
counts: [1, 2, 3],
reads: {paper: true}
};
var kid = extendDeep(dad);
//修改kid的counts屬性和reads屬性
kid.counts.push(4);
kid.reads.paper = false;
console.log(kid.counts); //[1, 2, 3, 4]
console.log(kid.reads.paper); //false
console.log(dad.counts); //[1, 2, 3]
console.log(dad.reads.paper); //true

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章