深拷贝

  1. 学一份深拷贝

学一份深拷贝

优秀的深拷贝啊,哈哈哈

function deepClone(obj) {
  const hash = new Map();
  return clone(obj);
  function clone(obj) {
    if (hash.has(obj)) return hash.get(obj);
    if (obj === null) return null;
    let t = typeof obj;
    let cobj;
    switch (t) {
      case "string":
      case "number":
      case "boolean":
      case "undefined":
        return obj;
      case "function":
        return eval(obj.toString());
    }
    if (Array.isArray(obj)) {
      cobj = [];
      obj.forEach(a => {
        cobj.push(clone(a));
      });
      return cobj;
    }
    cobj = obj.constructor !== Object ? Object.create(obj.constructor.prototype) : {};
    hash.set(obj, cobj);
    if (Object.prototype.toString.call(obj) === "[object Object]") {
      Object.getOwnPropertyNames(obj)
        .concat(Object.getOwnPropertySymbols(obj))
        .forEach(a => {
          cobj[a] = clone(obj[a]);
        });
    }
    return cobj;
  }
}

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 981909093@qq.com

文章标题:深拷贝

文章字数:131

本文作者:泽鹿

发布时间:2019-08-06, 19:56:38

最后更新:2019-08-28, 19:57:41

原始链接:http://panyifei.github.io/2019/08/06/前端面试/代码/基础/深拷贝/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏