};var o3 = deepClone(o1);console.log(o3 === o1); // => falseconsole.log(o3.obj === o1.obj); // => falseconsole.log(o2.func === o1.func); // => true
还有一种实现深拷贝的方式是利用 JSON对象 中的 parse 和 stringify ,JOSN对象中的stringify可以把一个js对象序列化为一个JSON字符串,parse可以把JSON字符串反序列化为一个js对象,通过这两个方法,也可以实现对象的深复制。
我们从下面的例子就可以看到,源对象的方法在拷贝的过程中丢失了,这是因为 在序列化JavaScript对象时,所有函数和原型成员会被有意忽略 ,这个实现可以满足一些比较简单的情况,能够处理JSON格式所能表示的所有数据类型,同时如果在对象中存在循环应用的情况也无法正确处理。
// 利用JSON序列化实现一个深拷贝function deepClone(source){
return JSON.parse(JSON.stringify(source));
}var o1 = {
arr: [1, 2, 3],
obj: {
key: ’value’
},
func: function(){
return 1;
}
};var o2 = deepClone(o1);console.log(o2); // => {arr: [1,2,3], obj: {key: ’value’}}
来源:SegmentFault
标签: