顾名思义,消息通道 ,用于web端信息通讯
解决跨文档通讯的需求
new 一个 messageChannel() 会有两个端口
port1 和port2
port1.postMessage() 在 port2.onmessage() 中能收到
port2.postMessage() 在 port1.onmessage() 中能收到
所以利用这个属性进行跨文档通讯
web worker中比较常见,iframe也可以用
写个讯通🌰
// main.js
let worker1 = new Worker('./worker1.js');
let worker2 = new Worker('./worker2.js');
let ms = new MessageChannel();
// 把 port1 分配给 worker1
worker1.postMessage('main', [ms.port1]);
// 把 port2 分配给 worker2
worker2.postMessage('main', [ms.port2]);
worker2.onmessage = function(event) {
console.log(event.data);
}
写个deepCopy🌰
var orignObj = {a: 1, b:2, c:{a:1}}
let cpObj = null
function deepCopy (obj, callback) {
const {port1, port2} = new MessageChannel();
port2.onmessage = function(d) {
console.log(d.data)
callback(d)
}
port1.postMessage(orignObj)
}
deepCopy(orignObj, (data) => {
cpObj = data
console.log(data)
})
另外兼容性还算不错~