- 通过递归实现深拷贝
var deepCopy= function(source) {
var result={};
for (var key in source) {
result[key] = typeof source[key]=== 'object'? deepCopy(source[key]): source[key];
}
return result;
}
const obj1 = { a : 1, b : 2, newobj: { a: 1 }}
const obj2 = deepCopy(obj1)
obj1.newobj.a = 2;
console.log(obj1); // { a : 1, b : 2, newobj: { a: 2 }}
console.log(obj2); // { a : 1, b : 2, newobj: { a: 1 }}
- 通过json.stringfy和json.parse实现
const obj1 = { a : 1, b : 2}
const obj2 = JSON.parse(JSON.stringify(obj1));
obj1.a = 2;
console.log(obj1); // { a:2, b:2 }
console.log(obj2); // { a:1, b:2 }
这种方法有缺陷,当对象中包含 undefined、函数以及 symbol 值的时候,在 JSON.stringify() 序列化过程中会被忽略,无法实现深拷贝。
- 通过$.extend()实现深拷贝
var item={name:“olive”,age:23,address{provice:”河南”,city:”郑州”}};
var item1={sex:”girl”,address{city:”北京”}};
var result=$.extend(true,item,item1);
var result1=$.extend(false,item,item1);
打印result和result1的结果为
Result={name:“olive”,age:23,sex:”gril”,address:{provice:”河南”,city:”北京”}};
Result1={name:“olive”,age:23,sex:”gril”,address:{ city:”北京”}};
当extend内的第一个参数为true时,实现的是深拷贝,false是浅拷贝