JavaScript 中对象的深拷贝(2)

/* ================ 深拷贝 ================ */ function deepClone(initalObj, finalObj) {     var obj = finalObj || {};     for (var i in initalObj) {         var prop = initalObj[i];           // 避免相互引用对象导致死循环,如initalObj.a = initalObj的情况         if(prop === obj) {             continue;         }           if (typeof prop === 'object') {             obj[i] = (prop.constructor === Array) ? [] : Object.create(prop);         } else {             obj[i] = prop;         }     }     return obj; }

三. 参考:jQuery.extend()方法的实现

jQuery.js的jQuery.extend()也实现了对象的深拷贝。下面将官方代码贴出来,以供参考。

官方链接地址:https://github.com/jquery/jquery/blob/master/src/core.js

jQuery.extend = jQuery.fn.extend = function() {     var options, name, src, copy, copyIsArray, clone,         target = arguments[ 0 ] || {},         i = 1,         length = arguments.length,         deep = false;       // Handle a deep copy situation     if ( typeof target === "boolean" ) {         deep = target;           // Skip the boolean and the target         target = arguments[ i ] || {};         i++;     }       // Handle case when target is a string or something (possible in deep copy)     if ( typeof target !== "object" && !jQuery.isFunction( target ) ) {         target = {};     }       // Extend jQuery itself if only one argument is passed     if ( i === length ) {         target = this;         i--;     }       for ( ; i < length; i++ ) {           // Only deal with non-null/undefined values         if ( ( options = arguments[ i ] ) != null ) {               // Extend the base object             for ( name in options ) {                 src = target[ name ];                 copy = options[ name ];                   // Prevent never-ending loop                 if ( target === copy ) {                     continue;                 }                   // Recurse if we're merging plain objects or arrays                 if ( deep && copy && ( jQuery.isPlainObject( copy ) ||                     ( copyIsArray = jQuery.isArray( copy ) ) ) ) {                       if ( copyIsArray ) {                         copyIsArray = false;                         clone = src && jQuery.isArray( src ) ? src : [];                       } else {                         clone = src && jQuery.isPlainObject( src ) ? src : {};                     }                       // Never move original objects, clone them                     target[ name ] = jQuery.extend( deep, clone, copy );                   // Don't bring in undefined values                 } else if ( copy !== undefined ) {                     target[ name ] = copy;                 }             }         }     }       // Return the modified object     return target; };

这篇文章主要是介绍js关于深拷贝的内容,其它的内容可以查看脚本之家以前发表的文章

您可能感兴趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwxyjf.html