Events

一、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)  //返回一个包含监听器(回调函数)的数组

 

posted @ 2016-06-13 20:58  DeadGhost  阅读(492)  评论(0编辑  收藏  举报