1 //浅复制 2 var obj={ 3 a:{ 4 son1:'aa', //obj对象里的a也是个对象 5 son2:'bb' 6 }, 7 b:20 8 }; 9 10 function copy(obj){ 11 var newobj={}; 12 for(arr in obj) 13 { 14 newobj[arr]=obj[arr] 15 } 16 return newobj; 17 } 18 19 obj2=copy(obj); 20 alert(obj2.a.son1);//成功复制出obj的a 21 obj.a.son1=555; //更改了obj的a.son2 22 alert(obj2.a.son1);//obj2的a.son1也随之改变
//深复制 var obj={ a:{aa:10},//浅拷贝解决不了对象中的对象 b:11 }; function deepcopy(obj){ if(typeof obj!='object') //检验是否彻底 { return obj; } var newobj={}; for(var attr in obj) { newobj[attr]=deepcopy(obj[attr]); //递归 (核心代码) } return newobj; } var obj2=deepcopy(obj); alert(obj.a.aa);//10 alert(obj2.a.aa);//10 成功复制深层对象aa obj2.a.aa=22; //改变obj2的a的aa alert(obj2.a.aa);// 改变 alert(obj.a.aa);//10 不变