js基础之深拷贝与浅拷贝
拷贝的对象的属性类型的不同决定是深拷贝还是浅拷贝。
对象内部属性如果是值类型,可直接全部拷贝,如果是对象,需要另做处理。
浅拷贝代码:
var user={
name:'小明',
type:‘普通用户’,
user_ID:'123',
copy:function(){
var temp={};
for(var i in this){
temp[i]=this[i]; //直接拷贝属性
};
return temp;
}
}
var wang=user.copy();
wang.name='小王'; //此时wang的name可改为小王,而user里的name还是小明,他们是独立的。
深拷贝代码:
//需要做的处理是使每个对象都有一个copy方法
function copy(){
var temp={};
for (var i in this){
if(typeof this[i] ==='object'){
temp[i]=this[i].copy();
}else{
temp[i]=this[i];
}
}
return temp;
}
var property={
car:'法拉利',
hourse:'海景房'
};
var user={
name:'小明',
type:‘普通用户’,
user_ID:'123',
property:property
};
user.copy=copy;
property.copy=copy; // 使对象都具有copy方法
var wang=user.copy();
wang.name='小王';
wang.property={car:'三轮',hourse:'地下室'} ; //此时小王的property也将与小明的property不一样,他们也是独立的。若用浅拷贝处理,那小王与小明将共享property指向的地址,无论谁改动都会影响另外一个。
深拷贝: