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

手写一个深拷贝函数

作者: 佐伊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)

相关文章

  • 深入JavaScript Day33 - 序列化实现深拷贝的缺点

    一、序列化实现深拷贝的缺点、手写深拷贝 1、借助序列化实现深拷贝,有哪些缺点? ①不能拷贝函数 ②不能拷贝Symb...

  • 手写深拷贝函数

  • 前端手写

    节流 防抖 用xhr手写axios 函数柯里化 手写promise 手写reduce new 深拷贝 string...

  • 手写一个深拷贝函数

    对不同类型做不同的处理

  • C++语言基础(02)

    1.可变参数 2.构造函数、析构函数、拷贝构造函数 构造函数 拷贝构造函数 //浅拷贝(值拷贝)问题 //深拷贝

  • 2019-10-27

    深拷贝和浅拷贝 浅拷贝 切片[:]操作 和copy()函数相同,都是浅拷贝。示例:copy()函数说明:c拷贝一个...

  • 手写深拷贝

    什么是深拷贝? 简单理解:b是a的一份拷贝,b中没有对a中对象的引用。另一种理解:b是a的一份拷贝,把b和a各画出...

  • 手写深拷贝

    注意:Object.assign()不是深拷贝 语法:Object.assign(target, ...sourc...

  • 手写深拷贝

    手写深拷贝 深拷贝 深拷贝简单理解就是b是a的一份拷贝,且b中不存在a中对象的引用 深拷贝的实现 1.JSON序列...

  • 手写深拷贝

    1. 简述深拷贝 JavaScript 中有2种变量类型:值类型(基本类型)和引用类型。深拷贝和浅拷贝都是针对引用...

网友评论

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

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