Skip to content
On this page

node 学习笔记 --- events 模块

events 模块只提供了一个对象:events.EventEmitter,是事件发射和事件监听器的封装。EventEmitter 的每个事件由一个事件名和若干参数组成。每个事件可用若干监听器,发射事件后,监听器依次调用,事件参数作为回调函数的参数传递。

例子

js
// test.1.js
let events = require('events')
//声明一个事件发生器
let emitter = new events.EventEmitter()
// 为 someEvent 事件注册监听器
emitter.on('someEvent', function (parm1, parm2) {
  console.log('listener1', parm1, parm2)
})
// 触发事件 第一个参数是事件名,第二个之后的参数是监听器参数
emitter.emit('someEvent', 'jack', 1994)

EventEmitter 常用 API

  • on(eventName,listener),为 eventName事件绑定一个监听器;
  • emit(eventName[,arg1,arg2]) 触发 eventName事件,arg1,arg2 作为监听器的参数;
  • once(eventName,listener),单次绑定监听器;
  • removeListener(eventName,listener),移除绑定事件;
  • removeAllListener([eventName]),移除所有监听器。

我们不会直接用 EventEmitter,而是用它的继承对象。比如 fs、net、http 等,只要支持事件响应的核心模块,都是 EventEmitter的子类。

这么设计的原因

  • 具体功能的对象实现事件,更符合语义,事件的监听和发射,应该是是一个对象的方法;
  • JS 继承机制基于原型,支持多重继承,不会打乱对象原有的继承关系。

Released under the MIT License.