JS模拟实现对象的深拷贝

一、理解深拷贝和浅拷贝

(1)JS中浅拷贝与深拷贝对应,是由JS的原始数据类型和引用数据类型决定的。
(2)对于原始类型数据,它的值存放在栈内存中,对于引用类型数据,它的栈中仅存储了一个数据存放的地址,真正的数据存放在堆内存中。
(3)当我们对原始类型数据进行赋值操作时,将栈内存中的值赋值给了被赋值对象,对被赋值对象进行运算并不对原始值产生副作用。当对引用类型数据进行赋值时,将栈中的存放的数据地址赋值给被赋值对象,被赋值对象指向同样的堆内存,修改被赋值对象对原对象产生副作用。

二、实现深拷贝

function copy(obj1,obj2){
	if(obj2){
		obj2={};
	}
	for(let attr in obj1){
		if(obj1.hasOwnProperty(attr)){
			if((typeof (obj1[attr])) =="object"&& obj1[attr]!=null){
				if(Object.prototype.toString.call(obj1[attr])=='[object Array]'){
					obj2[attr]=[]
				}else{
					obj2[attr]={};
				}
				copy(obj1[attr],obj2[attr]);
			}else{
				obj2[attr]=obj1[attr];
			}
		}
	}
	return obj2;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值