EventEmitter随便记录

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

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

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,645评论 25 709
  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,866评论 8 265
  • 万事开头难就像此刻,不知道如何命题怎么开始,再也不像以前想写点什么就文思泉涌絮叨不停了,哪怕自己知道是很幼稚的一些...
    Stillwaterzy阅读 3,587评论 0 2
  • 持续的努力,有了一个不错的结果。体重从之前的88㎏减到了78㎏。虽然体重轻了,但是肌肉多了。这段减肥的时间合计有一...
    天龙糖果阅读 1,144评论 2 0
  • 学生时期的恋爱总是很纯粹,不参杂任何物质的成分。特别是高中时期的恋爱。 思绪穿越时空,回到高中时期。同学A,个子不...
    houpanpan926阅读 1,248评论 2 1