首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

JavaScript中,高速实现一个对象的复制

2013-03-04 
JavaScript中,快速实现一个对象的复制!1、第一种方式,通过JSON转换。function clone (src) {return JSON.par

JavaScript中,快速实现一个对象的复制!
1、第一种方式,通过JSON转换。

function clone (src) {    return JSON.parse(JSON.stringify(src));}


注意,需要引入JSON库:
https://github.com/douglascrockford/JSON-js

2、第二种方式,通过编写JavaScript方法:
function clone(src) {  function mixin(dest, source, copyFunc) {    var name, s, i, empty = {};    for(name in source){      // the (!(name in empty) || empty[name] !== s) condition avoids copying properties in "source"      // inherited from Object.prototype.   For example, if dest has a custom toString() method,      // don't overwrite it with the toString() method that source inherited from Object.prototype      s = source[name];      if(!(name in dest) || (dest[name] !== s && (!(name in empty) || empty[name] !== s))){        dest[name] = copyFunc ? copyFunc(s) : s;      }    }    return dest;  }  if(!src || typeof src != "object" || Object.prototype.toString.call(src) === "[object Function]"){    // null, undefined, any non-object, or function    return src;  // anything  }  if(src.nodeType && "cloneNode" in src){    // DOM Node    return src.cloneNode(true); // Node  }  if(src instanceof Date){    // Date    return new Date(src.getTime());  // Date  }  if(src instanceof RegExp){    // RegExp    return new RegExp(src);   // RegExp  }  var r, i, l;  if(src instanceof Array){    // array    r = [];    for(i = 0, l = src.length; i < l; ++i){      if(i in src){        r.push(clone(src[i]));      }    }    // we don't clone functions for performance reasons    //    }else if(d.isFunction(src)){    //      // function    //      r = function(){ return src.apply(this, arguments); };  }else{    // generic objects    r = src.constructor ? new src.constructor() : {};  }  return mixin(r, src, clone);}

热点排行
Bad Request.