美文网首页
手写一个深拷贝函数

手写一个深拷贝函数

作者: 佐伊zero | 来源:发表于2020-08-17 14:37 被阅读0次

    对不同类型做不同的处理

    // 深拷贝
    
    function getType(obj) {
      return Object.prototype.toString.call(obj).slice(8, -1);
    }
    
    function copyArray(ori, copy = []) {
      for (const [index, value] of ori.entries()) {
        copy[index] = deepCopy(value);
      }
      return copy;
    }
    
    function copyObject(ori, copy = {}) {
      for (const [key, value] of Object.entries(ori)) {
    
        copy[key] = deepCopy(value);
      }
      return copy;
    }
    
    function copyFunction(ori, copy = () => {}) {
      return eval('fn =' + ori.toString());
    }
    
    function deepCopy(ori){
      const type = getType(ori);
      let copy;
      switch(type) {
        case 'RegExp':
          return new RegExp(ori);
        case 'Date':
          return new Date(ori);
        case 'Array':
          return copyArray(ori, copy);
        case 'Function':
          return copyFunction(ori, copy);
        case 'Object':
          return copyObject(ori, copy);
        default:
          return ori;
      }
    }
    function test() {
      console.log(1);
    }
    let c = {
      a: [1,2,4],
      b: {
        a:1,
        b: {
          c:1
        }
      },
      e: /\.js/,
      f: function() {
        console.log(1);
      }
    }
    
    let res = deepCopy(c);
    console.log(res.f === c.f)
    
    

    相关文章

      网友评论

          本文标题:手写一个深拷贝函数

          本文链接:https://www.haomeiwen.com/subject/hmlqjktx.html