前段时间在开发过程中遇到一个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;
}

经测试,可实现嵌套对象的深拷贝。总之,遇到什么问题,最好还是动手写写,本来认为挺简单的,写的过程中才会发现问题。