怎样封装事件

才接触node,知道EventEmitter可以用on方法添加事件,然后用emit触发事件。
现在我想自己写一个模块,可以对外提供添加事件的方法,然后模块执行过程中可以执行这些事件。

import MyFunc from './myfunc';
let my = new MyFunc();
my.on('start', function() {
    console.log('开始');
});
my.on('end', function() {
    console.log('结束');
})

我想达到的效果就类似上面这种,在模块外部可以给某些事件添加functions
模块内部应该用EventEmitter吗?怎么把on方法暴露出来?最好能给个例子,谢谢!

阅读 3.6k
1 个回答

继承EventEmiter
ES5

var EventEmitter = require("events").EventEmitter;

function MyClass() {
    EventEmitter.call(this);
}

MyClass.prototype = Object.create(EventEmitter.prototype);

MyClass.prototype.doSomething = function(data) {
    this.emit("doSomething", data);
}

ES6

var EventEmitter = require("events").EventEmitter;
class MyClass extends EventEmitter
{
    constructor(){
        super();
    }

    doSomething(data){
        this.emit("doSomething", data);
    }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题