克隆javascript对象的三个方法小结

  方法一

  

复制代码 代码如下:

  function clone(obj){

  var o;

  switch(typeof obj){

  case 'undefined': break;

  case 'string' : o = obj + '';break;

  case 'number' : o = obj - 0;break;

  case 'boolean' : o = obj;break;

  case 'object' :

  if(obj === null){

  o = null;

  }else{

  if(obj instanceof Array){

  o = [];

  for(var i = 0, len = obj.length; i < len; i++){

  o.push(clone(obj[i]));

  }

  }else{

  o = {};

  for(var k in obj){

  o[k] = clone(obj[k]);

  }

  }

  }

  break;

  default:

  o = obj;break;

  }

  return o;

  }

  方法二

  

复制代码 代码如下:

  function clone2(obj){

  var o, obj;

  if (obj.constructor == Object){

  o = new obj.constructor();

  }else{

  o = new obj.constructor(obj.valueOf());

  }

  for(var key in obj){

  if ( o[key] != obj[key] ){

  if ( typeof(obj[key]) == 'object' ){

  o[key] = clone2(obj[key]);

  }else{

  o[key] = obj[key];

  }

  }

  }

  o.toString = obj.toString;

  o.valueOf = obj.valueOf;

  return o;

  }

  方法三

  

复制代码 代码如下:

  function clone3(obj){

  function Clone(){}

  Clone.prototype = obj;

  var o = new Clone();

  for(var a in o){

  if(typeof o[a] == "object") {

  o[a] = clone3(o[a]);

  }

  }

  return o;

  }