//浅拷贝
let obj={
name:'xswl',
age:18,
fun:function () {
return this.name;
}
};
let obj2 = obj;
obj2.name='js';
console.log(obj.name,obj2.name);//js,js
//深拷贝
//方法1 遍历obj
let obj = {
name: 'awsl',
age: 18
};
let oldObj = {}
for (let i in obj) {
oldObj[i] = obj[i];
}
//方法2 JSON.stringify()
let J = JSON.stringify(obj);
let obj3 = JSON.parse(J);
//方法3 Object.assign()
let obj4 = {}//目标对象
let obj5 = {a:'xswl',b:5}//现有对象
obj4 = Object.assign(obj4,obj5);
obj4.b = 10; //修改obj4的属性b的值
console.log(obj4.b,obj5.b) //10 5
一 浅拷贝:
- obj变量保存的是对象的内存地址,如果只是赋值给obj2,就是将obj所保存的内存地址赋值给obj2使两个变量指向一个对象就是浅拷贝,因此改变obj2时obj也会跟着改变.
二 深拷贝:
- 使用 JSON.stringify() 方法.
- Object.assign() 方法, 此方法
参数1:目标对象, 参数2: 现有对象.
作用:可以将现有对象可枚举的属性复制到目标对象中.