赞
踩
浅拷贝:复制原有对象的地址值存入栈中,并指向原有对象堆空间数据
原有对象和拷贝对象的地址值指向同一个内存空间,并且具有
共享和连环性
深拷贝:复制原有对象的具体内容,并在栈中自主生成一个地址值(与原有对象地址值不 同),和堆中的一个新内存空间(与原有对象数据相同)并指向该内存。原有对象和新对象具有互不干涉性
浅拷贝方法
- 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)
有一下报错
- 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)
- }
- })
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。