普通克隆的方式
1. 大部分会使用 序列化和反序列化的方式 , 缺点:这种方式不会对对象中的函数或者Map对象进行深度克隆。
const result = JSON.parse(JSON.stringify(value))
2. 手写一个deepclone函数
//创建可回收map集合 来处理环形引用的情况 例如: obj.c = obj
const cache = new WeakMap()
function deepclone(value){
//如果不是对象或者null 直接返回
if(typeof value !== "Object" || value === null){
return value;
}
const cached = cache.get(value)
if(cached){
return cached
}
//创建一个新的clone对象
const result = Array.isArray(value) ? [] : {}
//将原对象的原型设置给新对象
Object.setPrototypeOf(result, Object.getPrototypeOf(value));
for(const key in value){
//只对对象下的可枚举属性进行克隆,原型下的属性不做clone
if(value.hasOwnProperty(key)){
//递归进行clone操作
result[key] = deepclone(value[key]);
}
}
cache.set(value, result)
return result
}
标签:const,克隆,value,deepclone,result,key,深度 From: https://www.cnblogs.com/xuhuang/p/17483128.html