深浅拷贝(吊打面试官的方法)

深浅拷贝概念

        浅拷贝:复制原有对象的地址值存入栈中,并指向原有对象堆空间数据

                        原有对象和拷贝对象的地址值指向同一个内存空间,并且具有

                        共享和连环性

        深拷贝:复制原有对象的具体内容,并在栈中自主生成一个地址值(与原有对象地址值不                               同),和堆中的一个新内存空间(与原有对象数据相同)并指向该内存。原有对象和新对象具有互不干涉性

浅拷贝方法

1、Object.asssign(目标对象,新对象)
2、var obj1={}
    for(var key in obj1){
        obj1[key]=obj2[key]
}

3、 var obj={}
    var obj1={...obj}

深拷贝方法  

        1  、使用JSON进行深拷贝,在所以该方法时无法处理对象循环调用(obj.a=obj)

                有一下报错

                

扫描二维码关注公众号,回复: 14880421 查看本文章
var obj1={}
var obj2=JSON.pores(JSON.stringify(obj1))

          2、(手撕面试官方法在此) 

                使用MessageChannel()构造函数,可以解决对象循环调用的情况

                原理:MessageChannel()构造函数,实例化了一个Channel对象,当iframe加载完毕

                           MessagePort.Post.Message方法会传递一条消息和MessageChannel.Port2给                              iframe,handleMessage将会接收该消息并放入innerHTML中

//此处采用封装
    funtion colne(obj){
        return new Promise(reslove()=>{
             const {port1,port2}= new MessageChannel()
                  port1.postmessage(obj)
                  port2.onmessage=(msg)=>{
                        reslove(msg.data)
    }
})
}

        

猜你喜欢

转载自blog.csdn.net/qq_59389108/article/details/129250430