0%

使用MessageChannel实现深拷贝

使用MessageChannel实现深拷贝

MessageChannel可以创建一个消息通道

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//传递一个字符串
const { port1, port2 } = new MessageChannel();
port1.postMessage('hello')
port2.onmessage = (e) => {
console.log(e.data) // hello
}

//传递一个函数,实现深拷贝
const { port1, port2 } = new MessageChannel();
const obj = {
a: 1,
b: {
c: 2
}
}
port1.postMessage(obj)
port2.onmessage = (e) => {
console.log(e.data) // {a: 1, b: {c: 2}}
console.log(e.data === obj) // false 深拷贝
}

// 封装成一个函数
function deepClone(obj) {
return new Promise(resolve => {
const { port1, port2 } = new MessageChannel();
port1.postMessage(obj);
port2.onmessage = ev => resolve(ev.data);
});
}
-------------本文结束感谢您的阅读-------------
技术原创:姚渐新,您的支持将鼓励我继续创作