为什么要用 let copyObj = new target.constructor(); 感觉多此一举
为什么不直接
hash.set(target, 1)就行
const clone = (target, hash = new WeakMap) => {
let result;
let type = checkedType(target);
if(type === 'object') result = {};
else if(type === 'array') result = [];
else return target;
if(hash.get(target)) return target;
let copyObj = new target.constructor();
hash.set(target, copyObj)
for (let key in target) {
if(checkedType(target[key]) === 'object' || checkedType(target[key]) === 'array') {
result[key] = clone(target[key], hash);
} else {
result[key] = target[key];
}
}
return result;
}
这是递归进行克隆操作,如果不拷贝一份,那么就可能存在新对象的某个成员指向和原来的那个对象同一个成员,一旦修改,出现联动的情况