浅拷贝与深拷贝

function extendCopy(p){
    var c={};
    for(var i in p){
       c[i]=p[i];
    }
    c.uber=p;
    return c;
}

c[i]=p[i],当对象类型的属性被拷贝时,实际上拷贝的知识该对象在内存中的位置指针。这一过程就是所谓的浅拷贝,这种情况下,如果我们修改了拷贝对象,就等同于修改了原对象。而深拷贝则可以帮助我们避免这方面的问题。

function deepCopy(p,c){
    var c = c || {};
    for(var i in p){
       if(typeof p[i]  === 'object'){
           c[i] = (p[i].constructor===Array)?[]:{};
           deepCopy(p[i],c[i]);
       }else{
          c[i]=p[i];
       }
    }
return c; }

现在我们来创建一个包含数组和子对象属性的对象:

var parent = {
    numbers:[1,2,3],
    letters:['a','b','c'],
    obj:{prop:1},
    bool:true
};

下面,我们分别用深拷贝和浅拷贝测试一下,就会发现深拷贝与浅拷贝不同。

 

posted on 2015-02-05 14:04  凡一二三  阅读(338)  评论(0编辑  收藏  举报