顾名思义,消息通道 ,用于web端信息通讯
解决跨文档通讯的需求
new 一个 messageChannel() 会有两个端口
port1 和port2

port1.postMessage() 在 port2.onmessage() 中能收到

port2.postMessage() 在 port1.onmessage() 中能收到

所以利用这个属性进行跨文档通讯

web worker中比较常见,iframe也可以用

image.png

写个讯通🌰

  1. // main.js
  2. let worker1 = new Worker('./worker1.js');
  3. let worker2 = new Worker('./worker2.js');
  4. let ms = new MessageChannel();
  5. // 把 port1 分配给 worker1
  6. worker1.postMessage('main', [ms.port1]);
  7. // 把 port2 分配给 worker2
  8. worker2.postMessage('main', [ms.port2]);
  9. worker2.onmessage = function(event) {
  10. console.log(event.data);
  11. }

写个deepCopy🌰

  1. var orignObj = {a: 1, b:2, c:{a:1}}
  2. let cpObj = null
  3. function deepCopy (obj, callback) {
  4. const {port1, port2} = new MessageChannel();
  5. port2.onmessage = function(d) {
  6. console.log(d.data)
  7. callback(d)
  8. }
  9. port1.postMessage(orignObj)
  10. }
  11. deepCopy(orignObj, (data) => {
  12. cpObj = data
  13. console.log(data)
  14. })

另外兼容性还算不错~image.png