zoukankan      html  css  js  c++  java
  • MessageChannel

    MessageChannel的基本使用

    const {port1, port2} = new MessageChannel();
    port1.onmessage = function(d) {
        console.log(`port1接收的消息是:${d.data}`);
    }
    port2.onmessage = function(d) {
        console.log(`port2接收的消息是:${d.data}`);
    }
    port1.postMessage('port1发送的消息');
    port2.postMessage('port2发送的消息');
    

    port1发送的由port2接收,port2发送的由port1接收。

    也就是说,传过去的对象,接收到的时候已经不是原来的引用和指针了,这个时候再return出来,就是一个新的对象,所以肯定能实现深拷贝。

    使用MessageChannel实现深拷贝

    var obj = {id:1,name:{a:'xx'}};
    
    function structuralClone(obj) {
        return new Promise((resolve) => {
            const {port1, port2} = new MessageChannel();
            port2.onmessage = ev => resolve(ev.data);
            port1.postMessage(obj);
        })
    }
    structuralClone(obj).then(res=>{
        console.log(res);
        var obj3 = res;
        obj3.name.a = 'obj3';
        console.log(obj,obj3);
    })
    
    <!-- 用promise是为了好传数据 -->
    
  • 相关阅读:
    centos 远程授权
    jar 包启动脚本
    Java 优化要点
    Java 性能优化
    maven快速自动更新子模块项目的版本号
    spring boot Tomcat文件上传找不到零时文件夹
    redis 集群常用命令
    java基础知识点学习
    Markdown 语法
    elasticsearch
  • 原文地址:https://www.cnblogs.com/firefly-pengdan/p/13402092.html
Copyright © 2011-2022 走看看