浅拷贝和深拷贝

//浅拷贝
var obj1={
age:10,
sex:"男",
car:["奥迪","宝马","奔驰","玛莎拉蒂"]
};
//另一个对象
var obj2={};
//写一个函数,作用:把一个对象的属性复制到另一个对象中,浅拷贝
//把a对象中的所有的属性复制到对象b中
function extend(a,b) {
for(var key in a){
b[key]=a[key];
}
}
extend(obj1,obj2);
console.dir(obj2);//开始的时候这个对象是空对象
console.dir(obj1);//有属性



//深拷贝
var obj1={
age:10,
sex:"男",
car:["奥迪","宝马","奔驰","玛莎拉蒂"],
dog:{
name:"大黄",
age:5,
color:"灰白色"
}
};
var obj2={};
//通过函数实现,把对象a中所有的数据深拷贝到对象b中
function extend(a,b) {
for(var key in a){
//先获取a对象中的每个属性值
var item=a[key];
//判断这个属性值是不是数组
if(item instanceof Array){
//如果是数组,那么在b对象中添加一个新的属性,并且这个属性也是数组
b[key]=[];
//调用这个方法,把a对象中这个数组的属性值一个一个的复制到b对象这个数组的属性中
extend(item,b[key]);
}else if(item instanceof Object){//判断这个值是不是对象类型的
//如果是对象类型的,那么在b对象中添加一个属性,是个空对象
b[key]={};
//再次调用这个函数,把a对象中的属性对象的值一个一个的复制到b对象的这个属性对象中
extend(item,b[key]);
}else {
//如果值是普通的数据,直接复制到b对象的这个属性中
b[key]=item;
}
}
}
extend(obj1,obj2);
console.dir(obj1);
console.dir(obj2);
原文地址:https://www.cnblogs.com/lujieting/p/10082490.html