You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
94 lines
3.6 KiB
94 lines
3.6 KiB
# EventEmitter3 |
|
|
|
[![Version npm](https://img.shields.io/npm/v/eventemitter3.svg?style=flat-square)](https://www.npmjs.com/package/eventemitter3)[![Build Status](https://img.shields.io/travis/primus/eventemitter3/master.svg?style=flat-square)](https://travis-ci.org/primus/eventemitter3)[![Dependencies](https://img.shields.io/david/primus/eventemitter3.svg?style=flat-square)](https://david-dm.org/primus/eventemitter3)[![Coverage Status](https://img.shields.io/coveralls/primus/eventemitter3/master.svg?style=flat-square)](https://coveralls.io/r/primus/eventemitter3?branch=master)[![IRC channel](https://img.shields.io/badge/IRC-irc.freenode.net%23primus-00a8ff.svg?style=flat-square)](https://webchat.freenode.net/?channels=primus) |
|
|
|
[![Sauce Test Status](https://saucelabs.com/browser-matrix/eventemitter3.svg)](https://saucelabs.com/u/eventemitter3) |
|
|
|
EventEmitter3 is a high performance EventEmitter. It has been micro-optimized |
|
for various of code paths making this, one of, if not the fastest EventEmitter |
|
available for Node.js and browsers. The module is API compatible with the |
|
EventEmitter that ships by default with Node.js but there are some slight |
|
differences: |
|
|
|
- Domain support has been removed. |
|
- We do not `throw` an error when you emit an `error` event and nobody is |
|
listening. |
|
- The `newListener` and `removeListener` events have been removed as they |
|
are useful only in some uncommon use-cases. |
|
- The `setMaxListeners`, `getMaxListeners`, `prependListener` and |
|
`prependOnceListener` methods are not available. |
|
- Support for custom context for events so there is no need to use `fn.bind`. |
|
- The `removeListener` method removes all matching listeners, not only the |
|
first. |
|
|
|
It's a drop in replacement for existing EventEmitters, but just faster. Free |
|
performance, who wouldn't want that? The EventEmitter is written in EcmaScript 3 |
|
so it will work in the oldest browsers and node versions that you need to |
|
support. |
|
|
|
## Installation |
|
|
|
```bash |
|
$ npm install --save eventemitter3 |
|
``` |
|
|
|
## CDN |
|
|
|
Recommended CDN: |
|
|
|
```text |
|
https://unpkg.com/eventemitter3@latest/umd/eventemitter3.min.js |
|
``` |
|
|
|
## Usage |
|
|
|
After installation the only thing you need to do is require the module: |
|
|
|
```js |
|
var EventEmitter = require('eventemitter3'); |
|
``` |
|
|
|
And you're ready to create your own EventEmitter instances. For the API |
|
documentation, please follow the official Node.js documentation: |
|
|
|
http://nodejs.org/api/events.html |
|
|
|
### Contextual emits |
|
|
|
We've upgraded the API of the `EventEmitter.on`, `EventEmitter.once` and |
|
`EventEmitter.removeListener` to accept an extra argument which is the `context` |
|
or `this` value that should be set for the emitted events. This means you no |
|
longer have the overhead of an event that required `fn.bind` in order to get a |
|
custom `this` value. |
|
|
|
```js |
|
var EE = new EventEmitter() |
|
, context = { foo: 'bar' }; |
|
|
|
function emitted() { |
|
console.log(this === context); // true |
|
} |
|
|
|
EE.once('event-name', emitted, context); |
|
EE.on('another-event', emitted, context); |
|
EE.removeListener('another-event', emitted, context); |
|
``` |
|
|
|
### Tests and benchmarks |
|
|
|
This module is well tested. You can run: |
|
|
|
- `npm test` to run the tests under Node.js. |
|
- `npm run test-browser` to run the tests in real browsers via Sauce Labs. |
|
|
|
We also have a set of benchmarks to compare EventEmitter3 with some available |
|
alternatives. To run the benchmarks run `npm run benchmark`. |
|
|
|
Tests and benchmarks are not included in the npm package. If you want to play |
|
with them you have to clone the GitHub repository. |
|
Note that you will have to run an additional `npm i` in the benchmarks folder |
|
before `npm run benchmark`. |
|
|
|
## License |
|
|
|
[MIT](LICENSE)
|
|
|