什么是深浅拷贝?
深拷贝:
修改新变量的值不会影响原有变量的值,默认情况下基本数据类型都是深拷贝。
浅拷贝:修改新变量的值会影响原有的变量的值,默认情况下引用类型都是浅拷贝。
class Person{
name = 'lj';
cat = {
age:2,
color:{
cor:"白色"
},
arr:[1,2,3,4,5,67,7]
};
eat() {
console.log(123);
};
sc = [1,3,5,];
}
let p1 = new Person();
let p2 = new Object();
// 深拷贝外层成功
// p2.name = p1.name;
// p2.name = 'zs';
// console.log(p1.name,p2.name);
// // 深拷贝失败 引用中的引用
// p2.cat = p1.cat;
// p2.cat.age = 66;
// console.log(p1.cat.age,p2.cat.age);
// 真正的深拷贝
deepCopy(p2,p1);
function deep(target,source){
// 1. 通过遍历拿到source中所有的属性
for(let key in source){
// console.log(key);
// 2. 取出当前遍历到的属性对应的取值
let sourceValue = source[key];
// console.log(sourceValue);
// 3.判断当前的取值是否是引用数据类型
if(sourceValue instanceof Object){
// console.log(sourceValue.constructor);
// console.log(new sourceValue.constructor);
let subTarget = new sourceValue.constructor; //新建对象或者数组等
target[key] = subTarget;
deep(subTarget,sourceValue); //递归
}else{
target[key] = source[key];
// console.log( target[key]);
}
}
}
p2.cat.color.cor = '蓝色';
console.log(p2);
console.log(p1);