MessageChannel是前端的api,可以让我们创建一个消息通道,以此发送数据.
示例
const { port1, port2 } = new MessageChannel();
port1.onmessage = function(event) {
console.log("port1收到的数据:", event.data);
}
port2.onmessage = function(event) {
console.log("port2收到的数据:", event.data);
}
port1.postMessage("port1发送的数据");
port2.postMessage("port2发送的数据");
// port2收到的数据: port1发送的数据
// port1收到的数据: port2发送的数据
可用来深拷贝
function deepCopy(obj) {
return new Promise((resolve) => {
const {port1, port2} = new MessageChannel();
port2.onmessage = ev => resolve(ev.data);
port1.postMessage(obj);
});
}
deepCopy(obj).then((copy) => { // 请记住`MessageChannel`是异步的这个前提!
let copyObj = copy;
console.log(copyObj, obj)
console.log(copyObj == obj)
});