对象引用以及如何实现对象的深拷贝

对象的引用:

//对象和函数都是引用的关系

/*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;

}

就是利用递归,一层一层的将每个对象的的每个属性的都赋予它,直到没有对象。

 

posted @ 2016-08-29 15:08  一座城池。  阅读(302)  评论(0)    收藏  举报