function deepClone(origin, hashMap = new WeakMap()){
if (origin == undefined || typeof origin !== 'object'){
return origin;
}
if (origin instanceof Date){
return new Date(origin);
}
if (origin instanceof RegExp){
return new RegExp(origin);
}
const hasKey = hashMap.get(origin);
if (hasKey){
return origin;
}
const target = new origin.constructor();
hashMap.set(origin, target);
for (const k in origin){
if (origin.hasOwnProperty(k)){
target[k] = deepClone(origin[k], hashMap);
}
}
return target
}
const obj1 = {
name: '张三',
age: '18',
job: ['计算器网络', 'js', { web: 'html', web_style: 'css' }],
hobby: {
ball: '大师',
cats: '网站'
}
}
const obj2 = deepClone(obj1);
console.log(obj1);
obj2.age = 22;
obj2.job[2].web = 'xml';
console.log(obj2);
const obj3 = {}
const obj4 = {}
obj3.obj4 = obj4
obj4.obj3 = obj3
console.log(obj3)
console.log(obj4)