• xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!


    js & Event Bus

    global event handler (broadcast / trigger / emit / listen )

    // 实现一个 EventBus类,这个类包含以下方法:
    // on(监听事件,该事件可以被触发多次)
    // once(也是监听事件,但只能被触发一次)
    // fire(触发指定的事件)
    // off(移除指定事件的某个回调方法或者所有回调方法)
    
    // 解题思路: class 存储 evnets, 按类型分别处理 once
    
    
    class EventBus {
        constructor() {
            this.eventBus = {};
        }
        on(name, callback) {
            this.eventBus[name] = {
                callback,
                once: false,
            };
        }
        once(name, callback) {
            this.eventBus[name] = {
                callback,
                once: true,
            };
        }
        off(name) {
            let keys = Object.keys(this.eventBus);
            if (keys.includes(name)) {
                delete this.eventBus[name];
            }
        }
        fire(name, person) {
            // dispatchEvent
            let keys = Object.keys(this.eventBus);
            if (keys.includes(name)) {
                let fun = this.eventBus[name].callback;
                let once = this.eventBus[name].once;
                // pass data
                fun(person);
                if (once) {
                    delete this.eventBus[name];
                }
            }
        }
    }
    
    
    

    demo

    
    const event = new EventBus();
    
    const log = console.log;
    
    event.on("drink", (person) => {
        log(person + "喝水");
    });
    
    event.on("eat", (person) => {
        log(person + "吃东西");
    });
    
    event.once("buy", (person) => {
        log(person + "买东西");
    });
    
    event.fire("drink", "我");
    // 我喝水
    event.fire("drink", "我");
    // 我喝水
    event.fire("eat", "其它人");
    // 其它人吃东西
    event.fire("eat", "其它人");
    // 其它人吃东西
    event.fire("buy", "其它人");
    //其它人买东西
    event.fire("buy", "其它人");
    //这里不会再次触发buy事件,因为once只能触发一次
    
    event.off("eat") //移除eat事件
    event.fire("eat", "其它人");
    //这里不会触发eat事件,因为已经移除了
    
    
    

    https://repl.it/@xgqfrms/Event-Bus



  • 相关阅读:
    uboot向内核模块传递参数的方法
    arm下用shell控制gpio
    u-boot的内存分布和全局数据结构
    Ambarella SDK build 步骤解析
    MMU段式映射(VA -> PA)过程分析
    ambarella H2 添加文件到ext4文件系统
    使用U-Boot的TFTP(远程/网络内核)
    使用U-Boot的NFS(远程/网络用户空间)
    君正Ingenic X1000E_halley2 更改Logo
    【自动化测试】robotframework中一些建议可能需要掌握的关键字
  • 原文地址:https://www.cnblogs.com/xgqfrms/p/12753262.html
Copyright © 2020-2023  润新知