1、对象的引用问题
var a = { username : 'xiaoming' };
var b = a;
b.username = 'xiaoqiang';
console.log( a ); // xiaoqiang 对象的引用问题
2、对象的拷贝
//对象的拷贝,用来解决对象之间的引用问题,希望让对象之间互相不影响。
var a = { username : 'xiaoming' };
var b = {};
for(var attr in a){
b[attr] = a[attr]; //字符串属于基本类型,所以不会产生引用 ,只能拷贝一层的话,叫做浅拷贝
}
b.username = 'xiaoqiang';
console.log( a );
var a = { username : { age : 20 } };
var b = {};
for(var attr in a){
b[attr] = a[attr]; //a[attr] -> { age : 20 } 依然是对象
}
b.username.age = 30;
console.log( a ); //受到了影响
//利用递归解决问题?
var a = { username : { age : 20 } };
var b = deepCopy(a); // 深拷贝(可以拷贝对象的多层)
b.username.age = 30;
console.log(b);
console.log(a);
function deepCopy(obj){
var result = {};
for(var attr in obj){
if( typeof obj[attr] == 'object' ){ //继续进行拆解(递归)
result[attr] = deepCopy(obj[attr]);
}
else{
result[attr] = obj[attr];
}
}
return result;
}