美文网首页高级JS
2018-03-30深度克隆、兼容对函数、正则对象、稀疏数组

2018-03-30深度克隆、兼容对函数、正则对象、稀疏数组

作者: 小飞侠zzr | 来源:发表于2018-03-30 09:01 被阅读0次
* deep clone
* @param  {[type]} parent object 需要进行克隆的对象
* @return {[type]}        深克隆后的对象
*/
const clone = parent => {
  // 维护两个储存循环引用的数组
  const parents = [];
  const children = [];

  const _clone = parent => {
    if (parent === null) return null;
    if (typeof parent !== 'object') return parent;

    let child, proto;

    if (isType(parent, 'Array')) {
      // 对数组做特殊处理
      child = [];
    } else if (isType(parent, 'RegExp')) {
      // 对正则对象做特殊处理
      child = new RegExp(parent.source, getRegExp(parent));
      if (parent.lastIndex) child.lastIndex = parent.lastIndex;
    } else if (isType(parent, 'Date')) {
      // 对Date对象做特殊处理
      child = new Date(parent.getTime());
    } else {
      // 处理对象原型
      proto = Object.getPrototypeOf(parent);
      // 利用Object.create切断原型链
      child = Object.create(proto);
    }

    // 处理循环引用
    const index = parents.indexOf(parent);

    if (index != -1) {
      // 如果父数组存在本对象,说明之前已经被引用过,直接返回此对象
      return children[index];
    }
    parents.push(parent);
    children.push(child);

    for (let i in parent) {
      // 递归
      child[i] = _clone(parent[i]);
    }

    return child;
  };
  return _clone(parent);
};

相关文章

  • 2018-03-30深度克隆、兼容对函数、正则对象、稀疏数组

  • 如何进行深度克隆?

    方法一 缺点:- 无法对对象中的函数, 正则表达式, 稀松数组等特殊对象进行克隆- 会使得所有对象的constru...

  • 常见手撕代码

    1.实现兼容IE的事件处理程序 2.编写深度克隆函数

  • javascript拷贝的实现(沈拷贝和浅拷贝)

    1.自己封装函数(通过递归方法) 递归方法实现深度克隆原理:遍历对象、数组直到里边都是基本数据类型,然后再去复制,...

  • JS实现深度克隆

    一、概念 深度克隆:深度克隆的新对象可以完全脱离原对象,我们对新对象的修改不会反映到原对象中 二、知识点储备: 1...

  • js浅克隆与深克隆

    什么是深克隆,什么是浅克隆呢? 首先,克隆只针对对象、数组、函数等复杂数据。浅克隆就是将栈内存中的引用复制一份,赋...

  • JSON对象

    JSON 对值的类型和格式有严格的规定。 **复合类型的值只能是数组或对象,不能是函数、正则表达式对象、日期对象。...

  • 重学Javascript之类型转换

    强制类型转换(显示类型转换) Number() Boolean() String() 调用数组、函数、对象和正则表...

  • 2 javascript

    浏览器窗口,屏幕大小 this指向 this最终指向调用他的对象 深度克隆 递归函数 在函数中调用自己functi...

  • 六:前段笔记(3)

    1.字符串扩展 2.数值的扩展 3.数组的扩展 4.对象的深度克隆

网友评论

    本文标题:2018-03-30深度克隆、兼容对函数、正则对象、稀疏数组

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