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