前段时间在开发过程中遇到一个bug,就是由于忽略了对象的深拷贝而引起的,最后用jQuery的深拷贝方法,算是修复了bug。想着深拷贝的原理也不难,无非是遍历每个key,依次赋值,就想自己写写。
1 function copy(dst,src){ 2 for(var key in src){ 3 dst[key]=src[key]; 4 } 5 return dst; 6 }
这是第一版代码,考虑不周全,未考虑嵌套对象、数组等因素,于是又写了第二版代码:
function deepCopy(src,dst){
dst=dst||(src.constructor === Array)? [] :{};
for(var key in src ){
if(typeof src[key]===’object’){
dst[key]= (src.constructor === Array)? [] :{};
deepCopy(src[key],dst[key]);
}
else{
dst[key]= src[key];
}
}
return dst;
}
经测试,可实现嵌套对象的深拷贝。总之,遇到什么问题,最好还是动手写写,本来认为挺简单的,写的过程中才会发现问题。