node . js怎么自定义实现一个EventEmitter

  介绍

这篇文章主要介绍“node . js怎么自定义实现一个EventEmitter”,在日常操作中,相信很多人在node . js怎么自定义实现一个EventEmitter问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”节点。js怎么自定义实现一个EventEmitter”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

<编辑类="目录">目录 <李>

前言

<李>

一、是什么

<李>

二,nodejs中EventEmitter使用方法

<李>

三,实现过程

前言

最近做了商品批发的需求,需要针对不同的商户选择对应的批发商品回显到原来的界面。由于该项目的代码是公司古董级别(这种代码都是程序猿的痛),解决问题的时候都是小心翼翼的。为了避免这种问题减少外部依赖,手动封装事件派发的函数。

一、是什么

我们了解到,节点采用了事件驱动机制,而EventEmitter就是节点实现事件驱动的基础
在EventEmitter的基础上,节点几乎所有的模块都继承了这个类,这些模块拥有了自己的事件,可以绑定/触发监听器,实现了异步操作
节点。js里面的许多对象都会分发事件,比如fs。readStream对象会在文件被打开的时候触发一个事件
这些产生事件的对象都是事件。EventEmitter的实例,这些对象有一个eventEmitter.on()函数,用于将一个或多个函数绑定到命名事件上

二,nodejs中EventEmitter使用方法

节点的事件模块只提供了一个EventEmitter类,这个类实现了节点异步事件驱动架构的基本模式,观察者模式
在这种模式中,被观察者(主体)维护着一组其他对象派来(注册)的观察者,有新的对象对主体感兴趣就注册观察者,不感兴趣就取消订阅,主体有更新的话就依次通知观察者们

const  EventEmitter =,需要(& # 39;事件# 39;)   class  MyEmitter  extends  EventEmitter  {}   const  myEmitter =, new  MyEmitter ()   function 回调(),{   ,,,console.log(& # 39;触发了事件事件! & # 39;)   }   myEmitter.on(& # 39;事件# 39;,,回调)   myEmitter.emit(& # 39;事件# 39;)   myEmitter.removeListener(& # 39;事件# 39;,,回调),

三,实现过程

基本代码如下所示:

//事件派发机制   (函数(),{   ,,,var  EventDispatcher =,()函数,{   ,,,,,,,var  EventDispatcherClosure =,()函数,{      ,,,,,,,};   ,,,,,,,EventDispatcherClosure.prototype =, {   ,,,,,,,,,,,/* *   ,,,,,,,,,,,,*,注册事件   ,,,,,,,,,,,,*,@param {对象},关键   ,,,,,,,,,,,,*,@param 对象}{fn   ,,,,,,,,,,,*/,,,,,,,,,,,:,函数(钥匙,,fn), {   ,,,,,,,,,,,,,,,//获取当前的事件对象   ,,,,,,,,,,,,,,,var  curEvents =, this._getCurEvents(关键);   ,,,,,,,,,,,,,,,//先检查该事件是否已经注册过了   ,,,,,,,,,,,,,,,var  flag =,假;   ,,,,,,,,,,,,,,,for  (var 小姐:=,0,,len =, curEvents.length;,小姐:& lt;, len;,我+ +),{   ,,,,,,,,,,,,,,,,,,,if  (curEvents[我].name ==, fn.name), {   ,,,,,,,,,,,,,,,,,,,,,,,//已经出现过了,以最新注册的函数为主   ,,,,,,,,,,,,,,,,,,,,,,,flag =,真的;   ,,,,,,,,,,,,,,,,,,,,,,,curEvents[我],=,fn;   ,,,,,,,,,,,,,,,,,,,,,,,休息;   ,,,,,,,,,,,,,,,,,,,}   ,,,,,,,,,,,,,,,}   ,,,,,,,,,,,,,,,if (!标志),{   ,,,,,,,,,,,,,,,,,,,curEvents [curEvents.length],=, fn;   ,,,,,,,,,,,,,,,}   ,,,,,,,,,,,,,,,this._register(钥匙,,curEvents);   ,,,,,,,,,,,},   ,,,,,,,,,,,/* *   ,,,,,,,,,,,,*,派发事件   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

node . js怎么自定义实现一个EventEmitter