前幾天阿里電話面的時(shí)候有問(wèn)到如何進(jìn)行深拷貝
這里總結(jié)一下
- 第一種:借助JSON深拷貝
思路是先把對(duì)象變成JSON字符串那伐,再轉(zhuǎn)化成對(duì)象
function JSONClone(obj){
if(!(obj instanceof Object)){
return obj
}else{
var obj2
var str = JSON.stringify(obj)
var obj2 = JSON.parse(str)
}
return obj2
}
var dem = JSONClone({a:2,c:3,v:{x:4}})
console.log(dem)
弊端是JSON不支持undefined用狱,函數(shù)彻亲,引用封孙,環(huán)....
- 第二種:遞歸拷貝
function clone(object){
var object2
if(! (object instanceof Object) ){
return object
}else if(object instanceof Array){
object2 = []
}else if(object instanceof Function){
object2 = eval(object.toString())
}else if(object instanceof Object){
object2 = {}
}
for(let key in object){
object2[key] = clone(object[key])
}
return object2
}
var fun = clone(()=>{console.log(1)})
fun() //1
這里并沒(méi)有考慮到環(huán)的情況