js deepclone(深度克隆 深拷贝)

1.最简单的方法,序列号反序列化一遍就好了,但是会丢失function,undefined或者NaN的属性

JSON.parse(JSON.stringify(xxx));

2.自己写一个方法,遍历获取属性

function deepClone(obj) {
  let objClone;
  if (obj && (obj.constructor == Object || obj.constructor == Array)) {
    objClone = new obj.constructor();
  } else {
    return obj;
  }
  for (const key in obj) {
    if ({}.hasOwnProperty.call(obj, key)) {
      objClone[key] = deepClone(obj[key]);
    }
  }
  return objClone;
}

后续百度了发现还有其他方法,在这补充一下
原文:https://zhuanlan.zhihu.com/p/78234841

3.通过Object.getPrototypeOf() 获取目标对象的原型,通过Object.assign()生成一个新的对象

function deepclone(target) {
  if (typeof target !== "object") return target;
  return Object.assign(
    {},
    Object.create(Object.getPrototypeOf(target)),
    target
  );
}

4.通过Object.getPrototypeOf() 获取目标对象的原型,通过扩展运算符以及proto来实现深度克隆(仅适用于浏览器端)

function deepclone(target) {
  if (typeof target !== "object") return target;
  return {
    __photo__: Object.getPrototypeOf(target),
    ...target
  };
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值