zoukankan      html  css  js  c++  java
  • 深拷贝实现方法以及问题

    1.JSON.stringify  JSON.parse方法实现
      let deepClone = function (obj) {

        return JSON.parse(JSON.stringify(obj));
      };

    2.用for…in实现遍历和复制

      function deepClone(obj) {
        let result = typeof obj.splice === "function" ? [] : {};
        if (obj && typeof obj === 'object') {
          for (let key in obj) {
            if (obj[key] && typeof obj[key] === 'object') {
              result[key] = deepClone(obj[key]);
            } else {
              result[key] = obj[key];
            }

          }
          return result;
        }
        return obj;
      }

    3.利用数组的Array.prototype.forEach进copy

      let deepClone = function (obj) {
        let copy = Object.create(Object.getPrototypeOf(obj));
        let propNames = Object.getOwnPropertyNames(obj);
        propNames.forEach(function (items) {
          let item = Object.getOwnPropertyDescriptor(obj, items);
          Object.defineProperty(copy, items, item);

        });
        return copy;
      };

    第一种方法:

      当遇到function,undefined,null时  会忽略这些字段

    第二种方法:

      当遇到继承问题时, 无法克隆原始对象的继承

      如:     

        function Person(name){
          this.name = name;
        }
        var tang = new Person('miya');
        var newtang = deepClone(tang)
        tang.constructor === Person       //true
        newtang.constructor === Person     //false
        console.log(newtang.constructor)    //ƒ Object() { [native code] }

    第三种方法:

      同Object.assign一样, 第一层深拷贝,往下几层浅拷贝

    原文:https://blog.csdn.net/qq_39083004/article/details/80206336 

  • 相关阅读:
    VirtualBox中的网络连接方式详解
    DRUID连接池的实用 配置详解
    redis之如何配置jedisPool参数
    怎么把myeclipse项目导入IDEA中
    最新Hadoop大数据开发学习路线图
    编程能力七段论(下)
    编程能力七段论(上)
    移动无线测试技能树
    WebView加载网页不显示图片解决办法
    编程能力七段论
  • 原文地址:https://www.cnblogs.com/Mr-Rshare/p/10830490.html
Copyright © 2011-2022 走看看