JS对象的深浅拷贝
首先是浅拷贝
var obj={
name:'小甜甜',age:24,say(){
console.log(111);
}
}
//浅拷贝,仅仅是指针给了另一个对象
var obj1=obj;
//console.log(obj1); //name: "小甜甜", age: 24, say: ƒ
obj1.name='小辣椒';
// console.log(obj); //name: "小辣椒", age: 24, say: ƒ
// console.log(obj1); //name: "小辣椒", age: 24, say: ƒ
深拷贝的方法,这里介绍三种:
深拷贝:两个对象之间没有任何关系,如果改变了一个,另一个不会受影响
1、通过json实现,会造成方法丢失
承接上文代码,可以看到方法会丢失
var obj1=JSON.stringify(obj);
obj1=JSON.parse(obj1);
console.log(obj1); //name: "小甜甜", age: 24
同样,如果给obj1修改里面的内容,obj是感受不到的
obj1.name='小番茄';
//obj感受不到变化
console.log(obj); //name: "小甜甜", age: 24, say: ƒ
console.log(obj1); //name: "小番茄", age: 24
2、通过for-in遍历循环实现
var obj1={};
for(var attr in obj){
obj1[attr]=obj[attr]
}
console.log(obj1); //name: "小甜甜", age: 24, say: ƒ
这时我们可以看到同样拷贝成功了,然后我们继续修改obj1,可以看到同样obj感受不到变化
//修改obj1
obj1.name = '哈希';
console.log(obj); //name: "小甜甜", age: 24, say: ƒ
console.log(obj1); //name: "哈希", age: 24, say: ƒ
3、使用Object.assign()实现
同样也是拷贝成功了,修改obj1时,同样obj不受影响
var obj1={};
//将obj合并到obj1上
Object.assign(obj1,obj);
console.log(obj1); //name: "小甜甜", age: 24, say: ƒ
obj1.age=66;
console.log(obj); //name: "小甜甜", age: 24, say: ƒ
console.log(obj1); //name: "小甜甜", age: 66, say: ƒ