代码改变世界

shallow copy and deep copy

2009-03-04 13:27  wlstyle  阅读(235)  评论(0)    收藏  举报
 1  var obj={
 2             name:"john",
 3             age:19,
 4             work:[3,6,8]
 5         }
 6         var simpleCopy= function(par){
 7             var chil={};
 8             for(var key in par){
 9                 chil[key]=par[key];
10             }
11             return chil;
12         }
13         var deepCopy=function(par,chil){
14             chil= chil|| {};
15             for(var key in par){
16                 iftypeof par[key] ==="object"){
17                     chil[key]= (par[key].constructor === Array)? []:{};
18                     deepCopy(par[key],chil[key]);
19                 }else{
20                     chil[key]= par[key];
21                 }
22             }
23             return chil;
24         }
25         var s=simpleCopy(obj);
26         var d= deepCopy(obj);
27         //s.work.push(9);
28         d.work.push(9);
29         console.log(d.work);
30         //console.log(s.work);
31         console.log(obj.work);

 

浅复制与深度复制的不同:

   复制的实际对象不同:浅复制复制的是一个引用 所以当复制的对象中的值比如将复制出的对象改变时候会影响到原始的他的父对象。s改变了它work属性中的值那么obj中的值也会相应的改变。而深度复制完全创建了一个新的对象。   chil[key]= (par[key].constructor === Array)? []:{}; deepCopy(par[key],chil[key]);这两句表明已经将原来的值放到了一个新的对象中 。所以复制出值的改变比如d.work的值改变 不会影响到他所复制 的父对象的属性。