深拷贝和浅拷贝

深拷贝:
修改新变量的值不会影响原有变量的值
默认情况下基本数据类型都是深拷贝
基本数据类型:
一:
for(let key in p1){
p2[key] = p1[key]
}
二:
assign方法可以将第二个参数的对象的属性和方法拷贝到第一个参数对象中
Object.assign(p2,p1)
引用数据类型:

class person{
		name = "smh";
		cat = {
				age:3
			};
			scores = [1, 3, 5];
	}
	let p1 = new person();
	let p2 = new Object();
depCopy(p2, p1)
function depCopy(target, source){
			//1.通过遍历拿到source中所有的属性 Object
			for(let key in source){
					//2.去除当前遍历到的属性对应的取值
					let sourceValue = source[key];
					//3.判断当前的取值是否是引用数据类型
					if(sourceValue instanceof Object){
							//sourceValue.constructor拿到对象的构造函数
							let subTarget = new sourceValue.constructor;
							target[key] = subTarget;
							//递归函数
							deCopy(subTarget, sourceValue);
					}else{
						target[key] = sourceValue
					}
			}
	}

浅拷贝:
修改新变量的值会影响原有的变量的值
默认情况下引用数据类型都是浅拷贝

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值