美文网首页
EventEmitter

EventEmitter

作者: Time_Notes | 来源:发表于2020-05-22 23:23 被阅读0次

    EventEmitter本质上是一个观察者模式的实现,所谓观察者模式:

    它定义了对象间的一种一对多的关系,让多个观察者对象同时监听某一个主题对象,当主题对象发生改变时,所有依赖于它的对象都将得到通知。

    因此最基本的EventEmitter,包含了一个观察者和一个被监听的对象,对应的实现就是EventEmitter中的on和emit:

    var events=require('events');

    var eventEmitter=new events.EventEmitter();

    eventEmitter.on('say',function(name){

        console.log('Hello',name);

    })

    eventEmitter.emit('say','Elsa');

    eventEmitter是EventEmitter模块的一个实例,eventEmitter的emit方法发出say事件;通过eventEmitter的on方法监听,从而执行相应的函数。


    EventEmitter构造函数的实现

    function EventEmitter(){

        this._events =Object.create(null);

    }


    addListener(eventName,listener):为指定事件添加一个监听器,别名为on

    removeListener(eventName,listener):移除某个事件的监听器,别名为off

    EventEmitter.prototype.on=EventEmitter.prototype.addListener

    EventEmitter.prototype.off=EventEmitter.prototype.removeListener


    on和once的区别:

    on对于某一指定事件添加的监听器可以持续不断的监听相应的事件;once添加的监听器,监听一次后就会被消除。


    两个特殊的事件:newListener和removeListener

    当实例化EventEmitter模块之后,监听对象是一个对象,包含了所有的监听事件。而这两个特殊的方法就是针对监听事件的添加和移除。

    newListener:在添加新事件监听器触发

    removeListener:在移除事件监听器时触发

    以newListener为例,会在添加新事件监听器的时候触发:

    function hello(name){

      console.log("hello",name);

    }

    var events=require('events');

    var emitter=new events.EventEmitter();

    emitter.on('newListener',function(eventName,listener){

      console.log(eventName);

      console.log(listener);

    });

    emitter.addListener('say',hello);

    //输出say和[Function: hello]

    从上述的例子来看,每当添加新的事件,都会自动的emit一个"newListener"事件,且参数为eventName(新事件的名)和listener(新事件的执行函数)。

    同理特殊事件removeListener也是同样的,当事件被移除,会自动emit一个"removeListener"事件。


    emit方法是出发事件,并执行相应的方法

    emit方法实现的程序流程图

    on方法则是对于指定的事件添加监听函数,就是往事件对象中_events添加相应的属性。

    on()流程图 off()流程图

    相关文章

      网友评论

          本文标题:EventEmitter

          本文链接:https://www.haomeiwen.com/subject/lcxfnhtx.html