Node之Event模块

本文详细探讨了Node.js中的Event模块,从引入模块到基本使用、订阅与发布事件、移除事件,以及EventEmitter的其他API。文章通过源码分析,解释了EventEmitter的工作原理,特别是事件存储和发布的实现细节,并讨论了Node.js不使用浏览器原生事件的原因可能在于性能优化。
摘要由CSDN通过智能技术生成

写在前面

事件的编程方式具有轻量级、松耦合、只关注事务点等优势,在浏览器端,有着自己的一套DOM事件机制,其中含包括这诸如事件冒泡,事件捕获等;然而Node的事件机制没有事件冒泡等,其原理就是设计模式中的观察者模式Node很多的模块继承这个事件模块,下面我们就来根据源码来学习下其API,做到知其然更知其所以然。

引入模块

const EventEmitter = require("events");
const EventEmitter = require("events").EventEmitter;

经常会看到这种两种方式来引入我们的events模块,但是在Node的高版本中可以直接使用第一种方式,高版本也支持下面这种方式,下面的这种方式主是在Node0.10.x版本时使用,源码中也是很清楚,之所以这么做就是为了兼容低版本时写下的Node代码:

module.exports = EventEmitter;
EventEmitter.EventEmitter = EventEmitter;

注:之后提到的objEventEmitter的实例对象,也就是obj = new EventEmitter()

基本使用

得到我们的事件构造函数后,我们就可以来实例化一个事件对象:

const EventEmitter = require("events"),
    follow = new EventEmitter();
follow.on("node", question => {
    console.log(`有一个关于node的问题: ${question}`);
});
follow.emit("node", "jade与ejs选择哪个?");

这是一个简单的使用,下面我们就来看看我们所用到的API以及它们的实现:

订阅事件

  • on(type, listener)来订阅事件,传入的type参数为事件名,listener为待发布函数。同时addListener方法和on方法有着同样的效果,指向的是内存的同一块:
EventEmitter.prototype.on = EventEmitter.prototype.addListener
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值