一. 克隆
克隆也叫拷贝,简而言之就是复制一份.浅拷贝就是通常对于引用数据类型指挥复制其指针,而不会复制它的值.深拷贝就是即便作为拷贝的对象的引用数据类型的某一本分发生了变化了,那么拷贝得到的值也不会变化.
// 实现一个深度拷贝
let obj1 = {
name:"li",
age:12
};
let obj2 = {
age:24
};
let arr2 = ["a", "b", obj2];
let arr = [obj1, 12, 45, arr2];
let res =copy(arr);
console.log(res);
obj2.age=25;
console.log(res);
function copy (target) {
if(target){
if(Object.prototype.toString.call(target) =="[object Array]") {
let arr = [];
// 这里符合条件,所以克隆
target.forEach(function (v) {
arr.push(copy(v));
});
return arr;
}else if(Object.prototype.toString.call(target) =="[object Object]") {
let o = {};
for (let kin target) {
o[k] =copy(target[k]);
}
return o;
}else {
return target;
}
}
}
二. es6的深拷贝
es6 有了深度克隆的方法.Object.assign
let obj = {age:21};
let arr = [1, 2, 3, obj];
let res = Object.assign(arr);
console.log(res); // [1,2,3,{age:21}]
obj.age =90;
obj.name ="李四";
console.log(res); // [1,2,3,{age:90,name:"李四"}]
实际上对于嵌套的对象,这种深度拷贝并没有卵用,还是需要使用递归去得道真正的深度拷贝