const clonedeep=(val,hash=new WeakMap)=>{
// 首先判断是不是 null undefined 如果是 直接返回
val==null && return val;
// 判断是不是object 如果不是 直接返回
typeof val !=='object' && return val;
// 判断是不是正则 如果是 new 一个正则返回去
val instanceof RegExp && return new RegExp(val);
// 判断是不是一个Date 如果是 返回一个Date
val instanceof Date && return new Date(val);
// 创建一个 对象 如果是 val 如果是数组 创建 数组 如果是对象创建对象
let instance =new val.constructor;
//先去hash中查看一下是否存在过 ,如果存在就把以前拷贝的返回去
if(hash.has(val)){
return hash.get(val);
}
// 如果没有的就存进去
hash.set(value,instance);
// 循环 拷贝
for(let key in val){
//判断是不是本身的属性 如果是才复制
if(val.hasOwnPorperty(key)){
// 拷贝 递归
instance[key]=clonedeep(val[key],hash);
}
}
return instance;
}