JavaScript--深拷贝和浅拷贝

1.浅拷贝

通常意义上,对数组和对象的 复制 / 拷贝 浅拷贝的特点:只是简单的复制拷贝
引用数据类型的地址,地址相同的变量,操作引用数据类型,彼此都会有影响 例如:

	let obj1 = {name : '常威',age : 20};
	let obj2 = obj1;
	obj2.name = '来福';
	obj2.age = 22;
	console.log(obj1);//输出结果:{name: "来福", age: 22}

我们通过修改 obj2 中的数据, obj1的数据也会发生改变
因为 obj1 和 obj2 中存储的是相同的内存地址,指向的是一个相同的数组
如果 obj1 和 obj2 任意的数据发生改变,都会影响另外一个变量的输出

2.深拷贝

对数组和对象的数值进行拷贝,而不拷贝引用数据类型内存地址,这样当我们操作
某一个数据类型的时候 另外一个的数值就不会发生改变

let obj1 = {name : '常威',age : 20};
let obj2 = {name:obj1.name,age:obj1.age};
obj2.name = '来福';
obj2.age = 22;
console.log(obj1,obj2);//输出结果:{name: "常威", age: 20},{name: "来福", age: 22}

3.通过 ES6 面向对象的构造方法来了解深浅拷贝

浅拷贝

class Data{
	constructor(year,month,day) {
	    this.year = year;
		this.month = month;
		this.day = day;
	}
}
// 浅拷贝
// 生成实例化对象
let data1 = new Data('2020','2','29');
let data2 = data1;
// 修改 data2 中的数据, data1 也会相应的发生改变
data2.year = '2200';
data2.month = '12';
data2.day = '31';
console.log(data1.year + '年' + data1.month + '月' + data1.day + '日'); //输出结果2200年12月31日
console.log(data2.year + '年' + data2.month + '月' + data2.day + '日'); //输出结果2200年12月31日

深拷贝

class Data{
	constructor(year,month,day) {
	    this.year = year;
		this.month = month;
		this.day = day;
	}
	// 拷贝构造方法
	clone(){
		let d = new Data(this.year,this.month,this.day);
		return d;
	}
}
// 浅拷贝
// 生成实例化对象
let data1 = new Data('2020','2','29');
// 此时 data2 拷贝 data1 中的构造方法 , 也就是只拷贝了数据,而不是拷贝的内存地址
let data2 = data1.clone();
// 所以此时修改 data2 的数据, data1 的数据就不会发生改变
data2.year = '2200';
data2.month = '12';
data2.day = '31';
console.log(data1.year + '年' + data1.month + '月' + data1.day + '日'); //输出结果2020年2月29日
console.log(data2.year + '年' + data2.month + '月' + data2.day + '日'); //输出结果2200年12月31日
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值