美文网首页
EventEmitter随便记录

EventEmitter随便记录

作者: 森丶如血 | 来源:发表于2018-04-26 13:50 被阅读0次

    最近突然想到不同事件监听对象能否相互触发,于是测试了一下。

    const EventEmitter = require('events');
    
    class A extends EventEmitter {
        constructor() {
            super();
            this.on('add', (x, y) => {
                console.log('event add: ', x + y);
            });
        }
    }
    
    class C extends A {
        constructor() {
            super();
            this.on('mul', (x, y) => {
                console.log('event mul: ', x * y);
            });
        }
    }
    
    class B extends EventEmitter {
        constructor() {
            super();
            this.c = new C();
    
            this.on('sub', (x, y) => {
                console.log('event sub: ', x - y);
            });
        }
    
        emit(event, ...args) {
            if (this.listenerCount(event)) {
                // EventEmitter内部由this取监听器执行, 由于super调用方法内部this指向子类,所以能成功执行对应事件
                super.emit(event, ...args);
            } else {
                this.c.emit(event, ...args);
            }
        }
    }
    
    // A的事件不能由B触发(如果A丶B之间不是继承关系),只能为各自实列触发(类的组合,触发)
    let b = new B();
    
    b.emit('add', 1, 2);
    
    b.emit('sub', 3, 4);
    
    b.emit('mul', 3, 3);
    
    // event add:  3
    // event sub:  -1
    // event mul:  9
    

    结果当然是不能,不过通过类的组合是可以的。

    相关文章

      网友评论

          本文标题:EventEmitter随便记录

          本文链接:https://www.haomeiwen.com/subject/ppwplftx.html