class DeepClone {
constructor(){
this.cache = []
}
clone(source){
if(source instanceof Object){
let cacheDist = this.findCache(source)
if(cacheDist){
return cacheDist
}else{
let dist
if(source instanceof Array){
dist = new Array()
}else if(source instanceof Date){
dist = new Date(source)
}else if(source instanceof RegExp){
dist = new RegExp(source.source,source.flags)
}else if(source instanceof Function){
dist = function(){
return source.apply(this,arguments)
}
}else{
dist = new Object()
}
this.cache.push([source,dist])
Object.keys(source).forEach(key=>{
dist[key] = this.clone(source[key])
})
return dist
}
}else{
return source
}
}
findCache(source){
for(let item of this.cache){
if(source === item[0]){
return item[1]
}
}
return undefined
}
}
js实现深拷贝
于 2024-02-22 11:26:30 首次发布