1.nodejs 提供事件模块,事件模块只有一个对象
EventEmitter
EventEmitter 的核心就 是事件发射与事件监听器功能的封装,EventEmitter 常用的API:
一直监听:EventEmitter.on(event, function)
添加监听:
EventEmitter.addListener(event,
function
)
发射事件:
EventEmitter.emit(event, [arg1],[arg2],[...])
单次监听:
EventEmitter.once(event,
function
)
移除监听:
EventEmitter.removeListener(event, function)
移除所有或者指定 event:
EventEmitter.removeAllListener([event])
2.例子:
var events = require('events');
var emitter = new events.EventEmitter();
emitter.on('someEvent', function(arg1, arg2){
console.log('listent1', arg1, arg2);
});
emitter.on('someEvent', function(arg1, arg2){
console.log('listent2', arg1, arg2);
});
emitter.emit('someEvent', 'byvoid', 1991);
3.error 事件:
如果只定义 emitter.emit 事件发射,不定义 事件监听,就会报错
4.EventEmitter 继承
大多数时候我们不会直接使用 EventEmitter,而是在对象中继承它。包括 fs、net、 http 在内的,只要是支持事件响应的核心模块都是 EventEmitter 的子类。
为什么要这样做呢?原因有两点:
首先,具有某个实体功能的对象实现事件符合语义, 事件的监听和发射应该是一个对象的方法。
其次JavaScript 的对象机制是基于原型的,支持 部分多重继承,继承 EventEmitter 不会打乱对象原有的继承关系。