EventEmitter类
- events模块只提供一个对象event.Eventter.
- EventEmitter 的核心就是事件触发与事件监听器功能的封装。
- Node.js中的所有的异步I/O操作在完成时都会发送一个事件到事件队列
创建实例
// 导入核心事件库
var events = require('events');
//创建事件对象
var myEvent = new events.EventEmitter();
- EventEmitter的简单用法:
绑定一个事件在控制台打印信息
on 函数用于绑定事件函数,emit 属性用于触发一个事件
var events = require('events');
var myEmitter = new events.EventEmitter();
//myEmitter.on(arg1,arg2),其中arg1是事件的名称,args是函数
myEmitter.on('show',function(message)){
console.log(message);
}
//提交事件
myEmitter.emit('show','the event was emitted');
- 案例
//事件
var events = require('events');
/*
导入工具库
*/
var util = require('util');
// 创建Person对象
var Person = function(name){
this.name = name;
}
// Person类继承事件类
util.inherits(Person,events.EventEmitter);
//实例化对象
var san = new Person('san');
var jam = new Person('jam');
var tom = new Person('tom');
//创建对象数组
var per = [san,jam,tom];
//循环输出
//对象数组绑定事件,控制台输出信息
per.forEach(function(per){
per.on("speak",function(msg){
console.log(per.name+"speak:"+msg);
})
})
// 事件提交
san.emit("speak","Hello");
jam.emit("speak"," Word !");
输出信息
事件监听器
- 常用方法:
1.addListener(event, listener)
为指定事件添加一个监听器到监听器数组的尾部。
2 on(event, listener)
为指定事件注册一个监听器,接受一个字符串 event 和一个回调函数。
server.on(‘connection’, function (stream) {
console.log(‘someone connected!’);
});
- listenerCount(emitter, event)
返回指定事件的监听器数量。
4.removeListener(event, listener)
移除指定事件的某个监听器,监听器必须是该事件已经注册过的监听器。
- 案例
var event = require('events');
// 创建eventEmitter对象
var eventEmitter = new event.EventEmitter();
// 监听器 #1
var listener1 = function listener1() {
console.log('监听器 listener1 执行。');
}
// 监听器 #2
var listener2 = function listener2() {
console.log('监听器 listener2 执行。');
}
// 绑定事件
eventEmitter.on('connection',listener1);
eventEmitter.on('connection',listener2);
/*
listenerCount(emitter, event)
返回指定事件的监听器数量。
*/
//监听connection事件
var eventListeners = eventEmitter.listenerCount('connection');
console.log(eventListeners+' 个监听器监听连接事件');
// 处理 connection 事件
eventEmitter.emit('connection');
// 移除listener2
eventEmitter.removeListener('connection',listener2);
console.log('listener2事件移除');
eventEmitter.emit('connection');
eventListeners = eventEmitter.listenerCount('connection');
console.log(eventListeners+' 个监听器监听连接事件');
console.log('执行完毕');
- eventEmitter.on()与eventEmitter.addListener()是相同的,而且一个事件可以绑定多个回调函数;