用postMessage 实现 deepClone的方案

134 阅读1分钟

使用MessageChannel 创建一个双下通道,在单独的上下文中传输数据,可以避免源数据受影响。

const deepClone = (obj) => {
    return new Promise((resolve, reject) => {
      const { port1, port2 } = new MessageChannel();
      port1.onmessage = (event) => {
        resolve(event.data);
      };
      port2.postMessage(obj);
    });
  };
  const obj = { a: 1, b: 22 };
  const c = await deepClone(obj);
  obj.a = 11;
  console.log(c);