Provides ability to subscribe and emit events. This event emitter is tailored for real-time applications so is designed with performance and memory efficiency in mind.
Also it has two build targets: ES5 (ECMA2009) and ES8+ (modern JS), to maximize browser support without sacrificing benefits of modern JS for majority of users.
Install:
npm install mr-eventemitter
In code:
const EventEmitter = require('mr-eventemitter');
<script type='module' src='mr-eventemitter.min.js'></script>
<script nomodule src='mr-eventemitter.es5.min.js'></script>
Use built files from a dist
directory for the browser. It will load ES8+ version if it is supported (~94%), otherwise it will load ES5 (ECMA2009) version that supports pretty much every platform.
CDN (jsDelivr)
You can use a public CDN for the library:
ES8+ module: https://cdn.jsdelivr.net/npm/[email protected]/dist/mr-eventemitter.min.js
ES5 version: https://cdn.jsdelivr.net/npm/[email protected]/dist/mr-eventemitter.es5.min.js
let obj = new EventEmitter();
obj.on('event', (a) => {
console.log('event', a);
});
obj.emit('event', 42);
Creating event emitter directly:
let obj = new EventEmitter();
With class:
class World extends EventEmitter {
contrunctor() {
super();
}
}
With prototype:
function World() {
EventEmitter.call(this);
}
World.prototype = Object.create(EventEmitter.prototype);
World.prototype.constructor = World;
obj.emit('event', 42);
Or with many arguments:
obj.emit('event', 4, 8, 16, 32);
obj.on('event', function(value) {
console.log('event', value);
});
It is possible to pass to an event many arguments:
obj.on('event', function(a, b, c, d) {
console.log('event', a, b, c, d);
});
For single life event use once
:
obj.once('event', function(value) {
console.log('event', value);
});
Sometimes providing scope for a callback function is usefull:
class Place {
constructor() {
this.name = 'Home';
world.on('event', function() {
// this - will be this `Place` instead of `world`
console.log('event', this.name); // hello Home
}, this); // - notice `this`
}
}
To remove event handler, you can use off
method on EventEmitter:
obj.off('event', fn);
To remove all events by name:
obj.off('event');
Remove a group of events, that match a regular expression:
obj.off(/input:\w+/);
obj.emit('init');
obj.emit('input:start'); // ignored
obj.emit('input:end'); // ignored
To remove all events:
obj.off();
And for easier management, on
and once
methods return EventHandler, which then can be used for removing events:
let evt = obj.on('event', (value) => {
console.log('event', value);
});
evt.off();
Builds a single file into two ES5 and ES8+ versions using Babel and Terser.
Source file: src/index.js
Built versions ES5 (dist/mr-eventemitter.es5.min.js
) and ES8+ (dist/mr-eventemitter.min.js
):
npm install
npm run build