javascript深度克隆

来源:互联网 发布:3668usb2.0端口驱动 编辑:程序博客网 时间:2024/05/20 09:48

Clone Anything with 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.prototypes = 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 functionreturn src;// anything}if(src.nodeType && "cloneNode" in src){// DOM Nodereturn src.cloneNode(true); // Node}if(src instanceof Date){// Datereturn new Date(src.getTime());// Date}if(src instanceof RegExp){// RegExpreturn new RegExp(src);   // RegExp}var r, i, l;if(src instanceof Array){// arrayr = [];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 objectsr = src.constructor ? new src.constructor() : {};}return mixin(r, src, clone);}


0 0
原创粉丝点击