← 中文资源

简体中文版本

迷你 EventEmitter 实现

从零实现 on、once、off、emit 与 listenerCount,on 返回退订函数,once 自动摘除。

阅读英文原文

目标

实现最小事件发射器:emit 返回被调用的监听器数量,once 触发一次后自动移除,事件触发中被移除的监听器不破坏遍历。

要点

监听器用 Set 存储、emit 时复制快照遍历,中途退订安全;demo 打印 hello world 与 listeners=1 fired=1。

提示

没有通配符、命名空间与最大监听器保护——刻意保持最小。

验证

node –test 四个用例含 once 语义与触发中移除;demo 单监听器单次触发。 复现命令:

node --test emitter.test.mjs
node emitter.mjs

预期输出要点:The demo emits a greeting event twice, prints the listener payload each time, and reports the remaining listener count.

实测证据:Node 22.23.2: node –test -> 4 passed; demo printed hello world and listeners=1 fired=1 for a single registered listener.