@actualwave/event-dispatcher

中文文档
1.3.3发布于 2026/05/04MITTypeScriptES Module零依赖近 30 天下载 1709

EventDispatcher is a JavaScript class that adds events support to custom objects.

原始使用文档
文档目录6 节
  1. Installation
  2. Usage
  3. API
  4. EventDispatcher
  5. Event
  6. Claude / AI Agent Skill

EventDispatcher

Build Status Coverage Status

Just another EventDispatcher/EventTarget implementation.

Installation

Easy to install with npm package manager

npm install --save @actualwave/event-dispatcher

with yarn package manager

yarn add @actualwave/event-dispatcher

Usage

Note: EventDispatcher distribution package contains package wrapped into UMD wrapper, so it can be used with any AMD module loader, nodejs require() or without any.

To start using EventDispatcher, just instantiate it on its own

class MyClass {
  constructor() {
    this._dispatcher = new EventDispatcher();
  }
  addListener(handler) {
    this._dispatcher.addEventListener('didSomething', handler);
  }
  doSomething() {
      this._dispatcher.dispatchEvent('didSomething');
  }
}

extend it with your class

class MyClass extends EventDispatcher {
  doSomething() {
    this.dispatchEvent('didSomething');
  }
}

After instantiating MyClass, every call of doSomething() will fire event didSomething and every listener attached to this event will be called with event object as argument.

var myObj = new MyClass();
myObj.addEventListener('didSomething', function(event) {
  console.log('My Listener', event.type);
});
myObj.doSomething();

When adding listeners they will be executed in same order as they where added. To change order you can use optional priority argument to addEventListener() method.

myObj.addEventListener('didSomething', function(event) {
  console.log('Prioritized Listener', event.type);
}, 1);
myObj.doSomething();

By default priority is set to 0, and you can specify higher priority >0 or lower <0, only integer values are allowed.

To fire event you should use dispatchEvent() method, it can be used in three ways: You can pass only event type string. In this case event object will be created by EventDispatcher

var dispatcher = new EventDispatcher();
dispatcher.dispatchEvent('eventType');

With event type you can specify any data, as second argument, that should be passed with event

dispatcher.addEventListener('eventType', function(event) {
  console.log('My Listener', event.type, event.data);
});
dispatcher.dispatchEvent('eventType', {myData: 'something'});

Also you can pass event object, it must contain type:String property

dispatcher.dispatchEvent({type: 'eventType', data: 'data is optional'});

If you want full control of events that fire from your EventDispatcher, you can specify event pre-processor function that will be called for each event before it fired. This function should return same or new event object.

function eventPreprocessor(event){
  event.data = event.data || {};
  return event;
}
var dispatcher = new EventDispatcher(eventPreprocessor);
dispatcher.dispatchEvent('eventType');

eventPreprocessor() function will be called with event object and returned object will be used.

Example available in project's example folder. To try example first run server

npm run server

And then go to http://localhost:8081/index.html

API

EventDispatcher

  • addEventListener(eventType:String, listener:Function, priority:int=0):void - Add listener to event type. Additionally priority can be set, higher values allow call listeners before others, lower -- after. Same listener can be added to event type using different priorities. By default, 0.
  • hasEventListener(eventType:String):void - Check if listener was added to event type.
  • removeEventListener(eventType:String, listener:Function):void - Remove event listener from event of specified type.
  • removeAllEventListeners(eventType:String):void - Remove all listeners from event of specified type.
  • dispatchEvent(eventType:String, data:Object=null):void - Dispatch event of eventType and pass data. Will create object of built-in class Event and pass it as first argument to listeners.
  • dispatchEvent(event:Object):void - Event object that should be fired, can be any object. Only requirement -- it must contain field type with event type.

EventDispatcher constructor accepts optional argument eventPreprocessor(event:Object):Object, function that receive event object as argument and should return same or new/changed event object that will be passed to event listeners.

Event

Built-in class to represent dispatched event. Objects of Event class are used when dispatchEvent() method is called with eventType.

  • type:String - Event type.
  • data:Object - Data object passed to EventDispatcher.dispatchEvent() method.
  • preventDefault():void - Will change "prevented" flag from FALSE to TRUE, it can be requested via isDefaultPrevented() method.
  • isDefaultPrevented():Boolean - Will return TRUE if preventDefault() was called.

Any event(instance of built-in Event class or any other object passed as event) gains additional methods when its being dispatched. After cycle finished, these methods will be removed from event object.

  • stopPropagation():void - Stop event propagation after processing all listeners of same priority.
  • stopImmediatePropagation():void - Stop event propagation on current listener.

Claude / AI Agent Skill

This package includes a SKILL.md file (Agent Skills format) that teaches AI coding assistants how to use the library. When installed as an npm dependency, the skill is available at node_modules/@actualwave/event-dispatcher/dist/SKILL.md and can be loaded by Claude Code or any compatible agent to get accurate, up-to-date usage guidance without relying on training data.

Written with StackEdit.

版本与发布记录

@actualwave/event-dispatcher 共发布 8 个版本,首次发布于 2018/04/08;过去 12 个月发布了 3 个版本。

版本发布日期距今
1.3.3latest2026/05/046 个月前
1.3.22026/05/026 个月前
1.3.12026/05/026 个月前
1.2.22018/10/168 年前
1.2.12018/10/158 年前
1.2.02018/10/158 年前

关于 @actualwave/event-dispatcher 的常见问题

@actualwave/event-dispatcher 是什么?

EventDispatcher is a JavaScript class that adds events support to custom objects.

如何安装 @actualwave/event-dispatcher?

在项目目录运行 npm install @actualwave/event-dispatcher,或使用 pnpm add / yarn add / bun add。

@actualwave/event-dispatcher 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@actualwave/event-dispatcher 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@actualwave/event-dispatcher 可以商用吗?

@actualwave/event-dispatcher 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@actualwave/event-dispatcher 的下载量有多少?

根据 npm 官方下载统计,@actualwave/event-dispatcher 在 2026/10/05 – 2026/11/03 这 30 天内被下载 1,709 次,日均约 57 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@actualwave/event-dispatcher 还在维护吗?

最新版本 1.3.3 发布于 2026/05/04(6 个月前);至今共发布 8 个版本,其中过去 12 个月发布了 3 个;首次发布于 2018/04/08。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。