浅拷贝与深拷贝
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 };
下面,我们分别用深拷贝和浅拷贝测试一下,就会发现深拷贝与浅拷贝不同。