使用WeakMap解决deepClone遇到循环引用对象时产生的

2019-07-23  本文已影响0人  TerdShow
const deepClone = (value, hash=new WeakMap) => {
  if(value == null) return value;
  if(value instanceof RegExp) return new RegExp(value);
  if(value instanceof Date) return new Date(value);
  if(typeof value != 'object') return value;
  let obj = new value.constructor();
  if(hash.get(value)){
    return hash.get(value);
  }
  hash.set(value, obj);
  for(var k in value) {
    if(value.hasOwnProperty(k)){
      obj[k] = deepClone(value[k], hash);
    }
  }
  return obj;
}

let a = {
  m: 1,
  n:{
    x:12,
    y:13
  }
}

let b =  deepClone(a);

b.m = 100;

console.log(b);
console.log(a);
上一篇 下一篇

猜你喜欢

热点阅读