简单的认识一下深拷贝和浅拷贝
var obj = {
name: '逆风狂小狗', age: 24, say() {
console.log('见过你的美,还会爱上谁!');
}
};
浅拷贝
将原对象或原数组的引用直接赋给新对象,新数组,新对象/数组只是原对象的一个引用
//浅拷贝,仅仅是指针给了另一个对象
var obj1 = obj;
console.log(obj1); //输出的是对象
//如果修改obj1中的内容
obj1.name = 'Uzi';
//这时候原对象的内容也会修改
console.log(obj);
深拷贝
两个对象之间没有任何关系
创建一个新的对象和数组,将原对象的各项属性的“值”(数组的所有元素)拷贝过来,是“值”而不是“引用”
一:通过JSON实现
// 通过json实现,会造成方法丢失
var obj1 = JSON.stringify(obj);
console.log(obj1); //{"name":"麻辣香锅","age":18}
obj1 = JSON.parse(obj1);
console.log(obj1); //对象 {name: "麻辣香锅", age: 18}
obj1.name = '谁敢横到立马';
//obj感受不到变化
console.log(obj);
二:通过for-in遍历循环,实现
var obj3 = {};
for (var attr in obj) {
// console.log(attr);
// obj3.name = '唯我虎大将军'; //意思是创建一个属性并赋值
obj3[attr] = obj[attr] //将obj里面的属性值赋值给obj3[attr]
}
console.log(obj3); //对象 {name: "麻辣香锅", age: 18, say: ƒ}
obj3.say(); //见过你的美还能爱上谁!
//修改obj3
obj3.name = '独乐了乐不如众乐乐'
console.log(obj);
三:使用Object.assign()
var obj4 = {};
//将obj合并到obj4上
Object.assign(obj4, obj);
console.log(obj4);
obj4.age = 999999;
console.log(obj4);