实现深拷贝

151 阅读1分钟

第一种:JSON 来深拷贝

 var a = {...}
 var b = JSON.parse( JSON.stringify(a) )
缺点:JSON 不支持函数、引用、undefined、RegExp、Date……

第二种:递归拷贝

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 = {}
     }
     你也可以把 Array Function Object 都当做 Object 来看待,参考 https://juejin.cn/post/6844903461000069128
     for(let key in object){
         object2[key] = clone(object[key])
     }
     return object2
 }
 思路:先判断是否是对象,如果不是的话判断是否为Array,是否是Function,是否是Object,最后遍历进行复制

区别:

1.浅拷贝并不复制对象本身而是复制一个指针,新对象和旧对象都是在同一块内存地址
2.深拷贝则会复制整个对象,新对象与旧对象是两块内存地址