zoukankan      html  css  js  c++  java
  • JS复杂对象克隆

    之前一直比较习惯用Ext.apply()方法来实现对象的克隆,今天遇到一个问题,当对象中含有数组,且数组中包含复杂类型时,Ext.apply()的克隆就有问题了。

    于是就想着试试自己能不能解决。在网上查了一会儿,发现如下代码:

    function clone(myObj){
    if(typeof(myObj) != 'object') return myObj;
    if(myObj == null) return myObj;
    
    var myNewObj = new Object();
    
    for(var i in myObj)
    myNewObj[i] = clone(myObj[i]);
    
    return myNewObj;
    }

    将其加进项目试了一下,发现基本实现了我想要的结果。但是有一个问题,当对象内部有数组成员的地方变成了Object类型,而且它的内置方法如“indexof”也被复制成了一遍,意思就是每一个内置方法都有两个同名方法。我想它的主要原因还是没有对Array类型做特殊处理。

    于是经过自己理解进行修改,完全实现了我想要的结果。代码如下:

     1 function Clone(myObj) {
     2         /// <summary>
     3         /// 对象复制
     4         /// </summary>
     5         /// <param name="myObj"></param>
     6         /// <returns type=""></returns>
     7         if (myObj === null || myObj === undefined || typeof (myObj) != 'object')
     8             return myObj;//五种简单类型复制
     9         if (myObj.constructor === Array) {//数组复制
    10             if (myObj.length === 0) return myObj;
    11             else
    12                 var myNewArr = [];
    13             for (var i = 0; i < myObj.length; i++) {
    14                 myNewArr.push(Clone(myObj[i]));
    15             }
    16             return myNewArr;
    17         }
    18         //其他对象复制
    19         var myNewObj = new Object();
    20         for (var i in myObj) {
    21             myNewObj[i] = Clone(myObj[i]);
    22         }
    23         return myNewObj;
    24     }

      

  • 相关阅读:
    MySQL 配置优化
    django基础之数据库操作
    Python常用内置模块之xml模块
    linux命令总结iostat命令
    springboot接口返回封装与异常控制
    springboot接口访问权限AOP实现
    springboot动态多数据源
    Elasticsearch一些使用笔记(持续更新)
    python语言中的AOP利器:装饰器
    如何使用supervisor管理你的应用
  • 原文地址:https://www.cnblogs.com/-------perfect/p/3492289.html
Copyright © 2011-2022 走看看