使用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);