zoukankan      html  css  js  c++  java
  • js深拷贝

    getType 函数获取函数类型

    首先我们要实现一个getType函数对元素进行类型判断,直接调用Object.prototype.toString 方法。

    function getType(obj){
           //tostring会返回对应不同的标签的构造函数
           const toString = Object.prototype.toString;
           const map = {
              '[object Boolean]'  : 'boolean', 
              '[object Number]'   : 'number', 
              '[object String]'   : 'string', 
              '[object Function]' : 'function', 
              '[object Array]'    : 'array', 
              '[object Date]'     : 'date', 
              '[object RegExp]'   : 'regExp', 
              '[object Undefined]': 'undefined',
              '[object Null]'     : 'null', 
              '[object Object]'   : 'object'
          };
          if(obj instanceof Element) {
               return 'element';
          }
          return map[toString.call(obj)];
       }
    

    深拷贝(deepCopy)


    对于一个引用类型,如果直接将它赋值给另一个变量,由于这两个引用指向同一个地址,这时改变其中任何一个引用,另一个都会受到影响。当我们想复制一个对象并且切断与这个对象的联系,就要使用深拷贝。对于一个对象来说,由于可能有多层结构,所以我们可以使用递归来解决这个问题

      

    function deepCopy (data) {
      let type = getType(data),
      o;
      if (type === 'array') {
        o = [];
      } else if (type === 'object') {
        o = {};
      } else {
        return data;
      }
      if (type === 'array') {
        for (let index = 0; index < data.length; index++) {
          const element = data[index];
          o.push(deepCopy(element));
        
        }
      } else if (type === 'object'){
        for (const key in data) {
          if (data.hasOwnProperty(key)) {
            const element = data[key];
            o[key] = deepCopy(element);
          }
        }
      }
      return o;
    }
    

      

      

  • 相关阅读:
    项目纪实一
    Quartz.net一个简要示例
    ASP.NET MVC4 WebAPI若干要点
    利用委托实现父控件与子控件之间消息传递
    js获取屏幕信息
    jsion大括号和中括号,及调用
    jquery解析jsion
    hibernate初步
    java web笔记
    mysql存储过程
  • 原文地址:https://www.cnblogs.com/liuabo/p/12583172.html
Copyright © 2011-2022 走看看