一、EventEmitter类
1、描述:EventEmitter是Events模块定义的一个类,所有事件对象都是该类的实例
2、创建EventEmitter对象
- 直接创建:
const EventEmitter = require('events');
const myEmitter=new EventEmitter()
- (推荐)继承EventEmitter类,然后创建
const EventEmitter = require('events');
class MyEmitter extends EventEmitter{}
const myEmitter = new MyEmitter();
3、两种创建方法的区别:
- 子类继承Object类:class A extends Object {} //A其实就是构造函数
Object
的复制,A
的实例就是Object
的实例 - EventEmitter构造方法:
function EventEmitter() { EventEmitter.init.call(this); } //.... EventEmitter.init = function() { this.domain = null; if (EventEmitter.usingDomains) { // if there is an active domain, then attach to it. domain = domain || require('domain'); if (domain.active && !(this instanceof domain.Domain)) { this.domain = domain.active; } } if (!this._events || this._events === Object.getPrototypeOf(this)._events) { this._events = new EventHandlers(); this._eventsCount = 0; } this._maxListeners = this._maxListeners || undefined; }; //...
二、EventEmitter对象的方法和属性(emitter表示EventEmitter对象)
---参数说明:
- eventName <string> | <Symbol> //事件名称
listener<function>
//监听事件函数(回调函数) function([arg1,arg2][,...]){}
1、添加事件
(1)emitter.on(evnetName,listener); //添加事件,可以重复触发
(2)emitter.once(eventName,listener); //添加事件,不能重复触发
(3)emitter.addListener(eventName, listener); //和emitter.on(eventName,listener);一样 一模一样!!!
2、触发事件
(1)emitter.emit(eventName[,arg1,arg2][,...]); //返回true/false;若evnetName已被注册,返回true 否则返回false
3、移除事件
(1)emitter.removeListener(eventName, listener); //移除名为evnetName的事件
(2)emitter.removeAllListeners([eventName]); //删除所有指定的事件或者删除所有事件
4、设置监听事件的最大数目
(1)EventEmitter.defaultMaxListeners; //默认为10,一般不要改变该值(会影响所有的实例)
(2)emitter.setMaxListeners(n); //设置监听事件的最大数目为n,n可为Infinity (or 0
) (仅仅改变当前实例)
5、检查监听数目
(1)emitter.eventNames(); //返回一个包含所有已注册事件的数组,值为String或Symbol
(2)emitter.getMaxListeners(); //获取最大可监听的事件数目
6、检查一个同一名称的事件
(1)emitter.listenerCount(eventName); //返回名称为evnetName的事件数目
(2)emitter.listeners(eventName) //返回一个包含监听器(回调函数)的数组