js中的克隆

在js中克隆被分为深度克隆和浅克隆

克隆的概念

深克隆
所有元素或属性完全复制,与原对象完全脱离,也就是说所有对新对象的修改都不会映射到原对象中
浅克隆
原始类型为值传递,对象类型仍为引用传递,所以改变新对象中的引用值会改变原对象中

	var lilei = {
            sname: 'Li Lei',
            sage: 12,
            cars: [1, 2, 3],
            inrt() {
                console.log(`I'm ${this.sname},I'm ${this.sage}`);
            },
            department: {
                name: '研发一部',
                address: '武汉',
            }
        }

浅克隆

原始类型为值传递,对象类型仍为引用传递

			
			//origin 被克隆的对象 
			function clone(origin) {
				//判断时是不是对象 如果不是则直接返回origin
				if(typeof origin !== "object") {
					return origin;
				}
				//判断是不是数组是数组就创一个是数组
				var target = (origin instanceof Array) ? [] : {};
				//遍历origin中的属性并赋值给target
				for(const key in origin) {
					target[key] = origin[key];
				}
				return target
			}
			var obj = clone(lilei);
			console.log(obj);``

在这里插入图片描述
这是浅克隆出来的对象、
如果当改变新对象中的应用值原数组中也会改变
在这里插入图片描述

深克隆

所有元素或属性完全复制,与原对象完全脱离,

//origin 被克隆的对象 
function clone(origin) {
	//判断时是不是对象 如果不是则直接返回origin
	if(typeof origin !== "object") {
			return origin;
	}
	//判断是不是数组是数组就创一个是数组
	var target = (origin instanceof Array) ? [] : {};
	//遍历origin中的属性并赋值给target
	for(const key in origin) {
			//判断origin[key]是不是对象 如果是对象就调用clone(origin[key])
			target[key] = (typeof origin[key] === "object" && origin[key] !== null) ? clone(origin[key]) : origin[key]
	}
	return target
}
var obj = clone(lilei);
console.log(obj);``

在这里插入图片描述
这是浅克隆出来的对象、
如果当改变新对象中的引用值原数组中不会会改变
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值