zoukankan      html  css  js  c++  java
  • 带有handleEvent的eventEmitter

    class EventEmitter {
        #listeners = Object.create(null);
        #maxListener = 10;
    
        constructor() {
            
        }
    
        on(evt, cb) {
            const cbs = this.#listeners[evt] || (this.#listeners[evt] = []);
            cbs.length < this.#maxListener && (typeof cb == 'function' || cb.hasOwnProperty('handleEvent')) && cbs.push(cb);
        }
    
        once(evt, cb) {
            const fn = (...args) => {
                cb.call(null, ...args);
                this.off(evt, fn);
            };
            this.on(evt, fn);
        }
    
        off(evt) {
            (evt && this.#listeners[evt]) ? this.#listeners[evt] = [] : this.#listeners = Object.create(null);
        }
    
        emit(evt, ...args) {
            if (!this.#listeners[evt]) return
            this.#listeners[evt].forEach(cb => {
                if (cb.hasOwnProperty('handleEvent')) {
                    cb['handleEvent'].call(cb, ...args);
                } else {
                    cb.call(null, ...args);
                }
            });
        }
    }
    
  • 相关阅读:
    1
    vim配置
    pyspark
    添加底部小火箭+目录
    00
    博客园代码高亮设置
    01. 枚举类型
    01. 授权问题
    Android Studio打包签名全过程
    linux 阿里云源地址
  • 原文地址:https://www.cnblogs.com/zh33gl/p/14528614.html
Copyright © 2011-2022 走看看