1.Object.assign(target, obj1, obj2);
var a = {a:1,b:2};
var b = {};
Object.assign(b, a);
console.log(b); // {a:1,b:2}
a.a=2;
console.log(b); // {a:1,b:2}
看着像深拷贝,其实不然不完全。再看如下:
var a = {a:1,b:2, c: [0,2]};
var b = {};
Object.assign(b, a);
console.log(b); // {a:1,b:2, c: [0,2]}
a.c[0]=2;
console.log(b); // {a:1,b:2, c: [2,2]}
由此可见assign 属于浅拷贝
js实现深度拷贝的方法有一下几种:
方案一:利用现代浏览器支持的JSON对象做一次中转,实现深度克隆。
var deepClone = function (obj) {
var _tmp,result;
_tmp = JSON.stringify(obj);
result = JSON.parse(_tmp);
return result;
}
var obj1 = {family:{brother:"gege",father:"father",mother:"mother"},name:"xx"};
var obj2 = deepClone(obj1);
obj1.family.brother = "dd";
console.log(obj1);
console.log(obj2);
方案二:使用递归对对象每个字段进行遍历赋值到新的对象上,然后return;