当前位置:   article > 正文

深浅拷贝(吊打面试官的方法)_messagechanel实现深拷贝的原理

messagechanel实现深拷贝的原理

深浅拷贝概念

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

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

                        共享和连环性

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

浅拷贝方法

  1. 1Object.asssign(目标对象,新对象)
  2. 2var obj1={}
  3. for(var key in obj1){
  4. obj1[key]=obj2[key]
  5. }
  6. 3var obj={}
  7. var obj1={...obj}

深拷贝方法  

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

                有一下报错

                

 

  1. var obj1={}
  2. var obj2=JSON.pores(JSON.stringify(obj1))

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

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

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

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

  1. //此处采用封装
  2. funtion colne(obj){
  3. return new Promise(reslove()=>{
  4. const {port1,port2}= new MessageChannel()
  5. port1.postmessage(obj)
  6. port2.onmessage=(msg)=>{
  7. reslove(msg.data)
  8. }
  9. })
  10. }

        

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/68390
推荐阅读
相关标签
  

闽ICP备14008679号