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 

  • 相关阅读:
    python使用 db.select 返回的数据只能遍历一次
    redis学习主从配置
    php操作EXCLE(通过phpExcle实现读excel数据)
    php操作EXCLE(通过phpExcle实现向excel写数据)
    Redis 源码安装
    MongoDb环境安装
    php下载
    漂亮的jQuery tab选项卡插件
    jquery禁用右键、文本选择功能、复制按键的实现
    jquery中邮箱地址 URL网站地址正则验证实例
  • 原文地址:https://www.cnblogs.com/Mr-Rshare/p/10830490.html
Copyright © 2011-2022 走看看