对象引用以及如何实现对象的深拷贝
对象的引用:
//对象和函数都是引用的关系
/*var a = [1,2,3];
var b = a;
b.push(4);
alert(b); //1,2,3,4
alert(a); //1,2,3,4*/
就是共用同一资源。
那如何拷贝一个资源而不是引用关系,因为引用会改变原始资源?
1、浅拷贝:
2、var obj = {
3、 a : 10
4、};
5、
6、/*function copy(obj){ //浅拷贝
7、
8、 var newObj = {};
9、
10、 for(var attr in obj){
11、 newObj[attr] = obj[attr];
12、 }
13、
14、 return newObj;
15、
16、}*/
如果将地3行改为a:{b:10}};,就是将a下面还有一个对象,那么浅拷贝仍是引用关系,浅拷贝只能解决一层对象的引用。
2、深拷贝:
function deepCopy(obj){ //深拷贝
if(typeof obj != 'object'){
console.trace(); //console.trace()函数用来打印函数调用的栈信息
return obj;
}
var newObj = {};
for(var attr in obj){
newObj[attr] = deepCopy(obj[attr]);
}
return newObj;
}
就是利用递归,一层一层的将每个对象的的每个属性的都赋予它,直到没有对象。