在基于javascript的事件进行开发时,常用到event模块的EventEmitter类。要使自己的模块具有事件的触发和监听功能,比如想通过这种方式使用:
const Emitter = require('./Emitter');
const e = new Emitter;
e.on('hi', function (data) {
console.log("hi, " + data);
});
e.hello();
对于以上代码中的文件模块Emitter.js,可以有三种实现思路:
方法一
使用ES6关键字extends继承EventEmitter,这是最简单直观的方法:
const EventEmitter = require('events');
class Emitter extends EventEmitter {
hello() {
this.emit('hi', 'I am es6');
}
}
module.exports = Emitter;
方法二
通过util的继承方法继承EventEmitter:
const EventEmitter = require('events');
const util = require('util');
function Emitter() {
this.hello = function () {
this.emit('hi', 'I am util');
}
}
util.inherits(Emitter, EventEmitter);
module.exports = Emitter;
方法三
直接在EventEmitter对象中添加方法,然后将该对象导出:
const EventEmitter = require('events');
module.exports = function () {
let emitter = new EventEmitter;
emitter.hello = function(){
emitter.emit('hi', 'I am EventEmitter');
}
return emitter;
}