sister
v3.0.2
Published
Event manager.
Downloads
1,844,257
Readme
Sister
Foundation for your emitter implementation.
I have observed that there is a tendency to write your own implementation of event emitter. I have written a starter pack for those wishing to improve upon existing variations of event emitter implementation.
Please submit your implementation to the index when you are done.
In All Seriousness
Sister is 0.5kb event emitter that does three things: on
, off
and trigger
. It performs well (~18,313,548 operations/sec in browser). If you need something more advanced, consider one of the existing, mature alternatives.
Node
Download using NPM:
npm install sister --save
Browser
Download using Bower:
bower install sister --save
In browser, use gajus.Sister
window
object.
Methods
Parameters
emitter
Instance of theSister()
object.event
Name of the event.handler
A function to execute when the event is triggered.listener
Event listener.
emitter.on(event, handler)
- Add
handler
forevent
. - Return
listener
.
emitter.off(listener)
- Remove
listener
.
emitter.trigger(event, data)
- Invoke
event
listeners (in sequence) with the supplied argument. - Return
emitter
.
Usage
var Sister = require('sister'),
emitter = Sister(),
listener;
listener = emitter.on('foo', console.log);
emitter.trigger('foo', 'bar');
emitter.off(listener);
emitter.trigger('foo', 'baz');
This example will print "bar" in the console.log
.
Similar Libraries
There are several existing alternatives that you might want to consider before starting to write your own implementation of an event emitter.
| Repository | Stars | Forks | Commits | Last Commit | | --- | --- | --- | --- | --- | |asyncly/EventEmitter2| 846 | 92 | 321 | 2014-06-12 | |Wolfy87/EventEmitter| 711 | 102 | 628 | 2014-09-30 | |RobertWHurst/LucidJS| 375 | 15 | 141 | 2014-09-26 | |jeromeetienne/microevent.js| 284 | 57 | 17 | 2014-07-23 | |uxder/Radio| 242 | 20 | 47 | 2013-06-14 | |component/emitter| 150 | 52 | 69 | 2014-08-29 | |necolas/emitter.js| 75 | 3 | 51 | 2014-05-16 | |mkuklis/asEvented| 74 | 13 | 80 | 2014-01-10 | |FredyC/promised-land| 67 | 1 | 25 | 2014-09-05 | |postaljs/monologue.js| 66 | 6 | 32 | 2014-06-20 | |scottcorgan/tiny-emitter| 66 | 2 | 24 | 2014-09-16 | |primus/EventEmitter3| 57 | 7 | 76 | 2014-10-10 | |segmentio/wildcards| 56 | 2 | 21 | 2014-04-10 | |facebook/emitter| 50 | 12 | 6 | 2014-02-20 | |Gozala/events| 39 | 11 | 45 | 2014-08-29 | |danielstjules/pattern-emitter| 38 | 3 | 38 | 2014-04-25 | |hrsh7th/js-co-on| 31 | 0 | 12 | 2014-07-01 | |cpsubrian/node-eventflow| 22 | 5 | 44 | 2013-07-16 | |medikoo/event-emitter| 20 | 1 | 155 | 2014-08-22 | |component/channel| 19 | 1 | 20 | 2014-02-13 | |mixu/microee| 15 | 0 | 21 | 2014-02-27 | |qawemlilo/emitter| 14 | 2 | 26 | 2013-12-10 | |substack/node-ordered-emitter| 13 | 2 | 21 | 2013-07-11 | |godmodelabs/fwd| 12 | 1 | 23 | 2013-03-12 | |ericz/EventEmitter| 11 | 7 | 3 | 2013-02-08 | |fent/pauseable.js| 11 | 3 | 20 | 2014-07-29 | |defunctzombie/dom-events| 10 | 1 | 16 | 2013-11-20 | |bredele/emitter-queue| 10 | 0 | 14 | 2014-04-07 | |postaljs/monopost.js| 9 | 2 | 10 | 2013-02-04 | |addyosmani/polymer-eventemitter| 9 | 0 | 15 | 2014-01-24 | |busterjs/bane| 8 | 1 | 33 | 2013-11-23 | |fnando/emitter| 8 | 1 | 16 | 2014-10-01 | |sakabako/paperboy| 7 | 1 | 59 | 2014-10-01 | |Nicolab/node-ipc-events| 7 | 0 | 4 | 2014-07-02 | |fent/node-eventyoshi| 7 | 0 | 35 | 2014-07-29 | |yields/delegate-events| 7 | 0 | 2 | 2013-11-06 | |feross/re-emitter| 6 | 1 | 15 | 2014-07-23 | |dmotz/stream-snitch| 6 | 0 | 13 | 2014-09-07 | |jhermsmeier/emitter.js| 6 | 0 | 52 | 2014-05-19 | |hapijs/kilt| 5 | 1 | 17 | 2014-09-29 | |1000ch/EventEmitter| 5 | 0 | 23 | 2014-02-25 | |Raynos/eventemitter-light| 5 | 0 | 20 | 2012-08-04 | |mcollina/patrun-emitter| 5 | 0 | 26 | 2014-05-26 | |pgte/propagate| 5 | 0 | 12 | 2014-01-30 | |jonnywyatt/eventsWithPromises| 4 | 2 | 21 | 2014-08-26 | |oleics/node-caevents| 4 | 2 | 9 | 2012-04-09 | |lelandtseng/EventEmitter| 4 | 1 | 17 | 2013-10-19 | |petkaantonov/FastEmitter| 4 | 1 | 29 | 2013-10-22 | |Alex-ray/concierge| 4 | 0 | 33 | 2014-05-12 | |derekr/paganate| 4 | 0 | 13 | 2014-04-17 | |gdi2290/angular-event-emitter| 4 | 0 | 31 | 2014-07-19 | |maxponte/EventEmitter| 4 | 0 | 7 | 2014-08-08 | |iwillwen/node_emitter| 3 | 2 | 2 | 2012-03-10 | |IndigoUnited/js-events-emitter| 3 | 1 | 73 | 2014-04-18 | |kamicane/emi| 3 | 1 | 2 | 2012-03-06 | |olav/ee.js| 3 | 1 | 21 | 2014-02-13 | |vesln/evts| 3 | 1 | 14 | 2013-12-15 | |fent/node-newsemitter| 3 | 0 | 10 | 2014-07-29 | |yields/buffer-events| 3 | 0 | 4 | 2014-06-27 | |aconbere/evented| 2 | 2 | 10 | 2010-10-27 | |shokai/event_emitter.js| 2 | 2 | 39 | 2013-05-17 | |aluarosi/event0.js| 2 | 1 | 10 | 2014-03-17 | |benjreinhart/node-event-emitter| 2 | 1 | 5 | 2014-03-29 | |madimp/deferredEventEmitter| 2 | 1 | 6 | 2012-05-13 | |pierrec/node-ev| 2 | 1 | 13 | 2012-06-25 | |alexborisov/abNanoEvent| 2 | 0 | 5 | 2013-11-12 | |apily/emitter| 2 | 0 | 27 | 2014-06-19 | |eldargab/hooks-emitter| 2 | 0 | 5 | 2013-03-27 | |ericelliott/clctr| 2 | 0 | 8 | 2013-08-06 | |henrytseng/event-aggregator| 2 | 0 | 14 | 2014-03-05 | |ksdlck/Emitterarchy| 2 | 0 | 7 | 2012-01-18 | |pgte/boxed-emitter| 2 | 0 | 11 | 2012-12-31 | |rubenv/angular-tiny-eventemitter| 2 | 0 | 5 | 2014-07-25 | |ryanve/energy| 2 | 0 | 36 | 2014-05-10 | |steerapi/ti-event-emitter| 2 | 0 | 5 | 2011-12-29 | |tarunc/CollectionEventEmitter2| 2 | 0 | 2 | 2013-07-04 | |vinayakcs/eventEmitter| 2 | 0 | 11 | 2014-08-25 | |anthonyshort/emitter-manager| 1 | 2 | 12 | 2013-07-31 | |joaquimserafim/tiny-eventemitter| 1 | 2 | 7 | 2014-03-26 | |B-Vladi/EventEmitter| 1 | 1 | 111 | 2014-10-19 | |MatthewMueller/aemitter| 1 | 1 | 8 | 2014-05-24 | |chrisdickinson/estate| 1 | 1 | 7 | 2013-08-28 | |mccalltd/EventEmitter| 1 | 1 | 49 | 2014-01-04 | |UsabilityDynamics/node-object-emitter| 1 | 0 | 39 | 2014-08-30 | |asbjornenge/nanoemitter| 1 | 0 | 10 | 2014-05-12 | |buunguyen/evtify| 1 | 0 | 8 | 2014-03-09 | |cballou/jquery-eventemitter| 1 | 0 | 6 | 2014-02-10 | |enricomarino/events| 1 | 0 | 4 | 2011-10-31 | |erykpiast/angular-event-emitter| 1 | 0 | 7 | 2014-08-26 | |floatdrop/after-event| 1 | 0 | 9 | 2014-10-20 | |gummesson/evmit| 1 | 0 | 2 | 2014-04-26 | |hden/Bacon.EventEmitter| 1 | 0 | 5 | 2013-04-02 | |jaridmargolin/event-emitter.js| 1 | 0 | 6 | 2014-08-20 | |jdarling/hyjack| 1 | 0 | 28 | 2014-09-10 | |jharding/boomerang| 1 | 0 | 13 | 2013-07-09 | |jimgswang/EventEmitter| 1 | 0 | 44 | 2014-07-24 | |jkroso/dom-emitter| 1 | 0 | 48 | 2013-08-29 | |jls/emitJS| 1 | 0 | 9 | 2011-10-25 | |ksdlck/Emitting| 1 | 0 | 14 | 2012-01-19 | |maxhoffmann/emitter| 1 | 0 | 40 | 2014-08-20 | |npmcomponent/littlebitselectronics-EventEmitter2| 1 | 0 | 290 | 2013-08-13 | |nrn/nee| 1 | 0 | 4 | 2014-09-03 | |pete-otaqui/EventEmitter| 1 | 0 | 7 | 2011-05-24 | |pgte/switch-emitter| 1 | 0 | 9 | 2013-01-17 | |plediii/HevEmitter| 1 | 0 | 92 | 2014-09-30 | |rosylilly/EventEmitter.js| 1 | 0 | 5 | 2011-08-26 | |sjmulder/event-registrar| 1 | 0 | 3 | 2012-07-20 | |smagch/sprite| 1 | 0 | 10 | 2013-05-13 | |steelsojka/leafyjs| 1 | 0 | 23 | 2014-06-08 | |xwcoder/EventEmitter| 1 | 0 | 3 | 2014-09-14 | |Livefyre/event-emitter| 0 | 1 | 29 | 2014-09-24 | |evilharlequin/matter| 0 | 1 | 3 | 2014-07-25 | |ricardobeat/emmy| 0 | 1 | 9 | 2014-10-02 | |thibauts/eventemitter| 0 | 1 | 4 | 2014-06-25 | |AndreasMadsen/emitterpoint| 0 | 0 | 1 | 2013-08-27 | |Havvy/after-events| 0 | 0 | 1 | 2014-01-17 | |Kl0tl/events-emitter| 0 | 0 | 4 | 2014-01-12 | |LingyuCoder/EventEmitter| 0 | 0 | 7 | 2014-09-28 | |RangerMauve/mqtt-emitter| 0 | 0 | 8 | 2014-09-07 | |Raynos/cached-events| 0 | 0 | 1 | 2012-08-25 | |Raynos/multi-event| 0 | 0 | 5 | 2012-08-10 | |STRML/forward-emitter| 0 | 0 | 2 | 2014-06-30 | |SoftwareDevPro/EventEmitter.coffee| 0 | 0 | 3 | 2013-11-28 | |Tom32i/event-emitter.js| 0 | 0 | 9 | 2014-06-03 | |Wizcorp/events| 0 | 0 | 5 | 2014-03-10 | |alanshaw/funce-emitter| 0 | 0 | 10 | 2014-05-07 | |anchorjs/events| 0 | 0 | 28 | 2013-06-20 | |bendrucker/emit-then| 0 | 0 | 26 | 2014-10-11 | |bevacqua/contra.emitter| 0 | 0 | 7 | 2014-09-21 | |beyo/events| 0 | 0 | 10 | 2014-05-15 | |bmullan91/evt-emitter| 0 | 0 | 14 | 2014-10-19 | |browser-modules/event-emitter| 0 | 0 | 4 | 2014-07-20 | |brycebaril/eenano| 0 | 0 | 2 | 2014-08-16 | |btknorr/emitter-all| 0 | 0 | 14 | 2013-04-05 | |canvace/EventEmitter| 0 | 0 | 7 | 2013-10-26 | |chrisdickinson/every| 0 | 0 | 4 | 2013-02-19 | |chuckpreslar/broadcaster| 0 | 0 | 22 | 2013-07-06 | |cookfront/EventEmitter| 0 | 0 | 1 | 2014-07-19 | |coolbloke1324/emitter| 0 | 0 | 3 | 2014-03-26 | |coverslide/mkee| 0 | 0 | 8 | 2013-04-14 | |cybrown/SimpleEventEmitter| 0 | 0 | 3 | 2013-07-08 | |darlanalves/EventEmitter| 0 | 0 | 13 | 2014-10-11 | |devangpaliwal/eventemitter| 0 | 0 | 2 | 2013-07-28 | |dfcreative/emmy| 0 | 0 | 81 | 2014-10-15 | |dimik/EventEmitter| 0 | 0 | 8 | 2013-09-28 | |edubskiy/events.emitter.js| 0 | 0 | 2 | 2013-06-23 | |ericgj/logged-emitter| 0 | 0 | 2 | 2013-05-22 | |esatterwhite/node-pattern-emitter| 0 | 0 | 24 | 2014-05-08 | |eventEmitter/ee-event-emitter| 0 | 0 | 7 | 2014-08-24 | |exfm/event-emitter| 0 | 0 | 2 | 2012-09-07 | |fabiosantoscode/clientjs-event-emitter| 0 | 0 | 2 | 2013-01-22 | |fnobi/EventEmitter| 0 | 0 | 15 | 2014-08-12 | |fskreuz/MiniEvent| 0 | 0 | 3 | 2013-09-04 | |gaborsar/MicroEventEmitter| 0 | 0 | 6 | 2014-06-25 | |hachr/EventEmitter| 0 | 0 | 2 | 2014-05-21 | |jamesvsnowden/emitter| 0 | 0 | 9 | 2013-06-02 | |jbrumwell/jqevents| 0 | 0 | 4 | 2012-12-05 | |jdpanderson/OrderedEventEmitter| 0 | 0 | 3 | 2014-02-16 | |jillix/emitter| 0 | 0 | 21 | 2014-08-13 | |joechee/EventEmitter-async| 0 | 0 | 2 | 2014-09-27 | |kaerus-component/emitter| 0 | 0 | 23 | 2014-05-10 | |kalachevmax/semantic.events| 0 | 0 | 1 | 2014-06-22 | |kallaspriit/EventEmitter| 0 | 0 | 2 | 2013-08-08 | |lakenen/eemitter| 0 | 0 | 8 | 2014-06-26 | |madbook/easy-events| 0 | 0 | 2 | 2014-01-23 | |marcello3d/node-listenable| 0 | 0 | 1 | 2013-10-25 | |mateuspv/Events| 0 | 0 | 9 | 2014-05-21 | |mercmobily/EventEmitterCollector| 0 | 0 | 12 | 2013-11-23 | |mescoda/EventEmitter| 0 | 0 | 25 | 2014-03-18 | |michaelrhodes/event-relay| 0 | 0 | 5 | 2013-11-13 | |mpotra/events-async| 0 | 0 | 5 | 2014-05-11 | |mvantil/FutureEventEmitter| 0 | 0 | 3 | 2013-03-30 | |nathanfaucett/event_emitter| 0 | 0 | 28 | 2014-10-19 | |nathanmacinnes/edifice| 0 | 0 | 2 | 2014-04-28 | |neocoder/emmi| 0 | 0 | 1 | 2013-08-23 | |nib-health-funds/forward-events| 0 | 0 | 3 | 2014-07-14 | |niyazpk/EventEmitter| 0 | 0 | 16 | 2014-02-08 | |oliverroick/SuperSimpleEvents| 0 | 0 | 20 | 2014-10-12 | |pfraces-wip/pubsub| 0 | 0 | 6 | 2013-02-15 | |primus/emits| 0 | 0 | 13 | 2014-10-06 | |radubrehar/zemitter| 0 | 0 | 11 | 2014-09-08 | |redrockethq/jetpack| 0 | 0 | 4 | 2014-04-04 | |renra/event_emitter_js| 0 | 0 | 1 | 2014-03-13 | |reu/event-emitter.js| 0 | 0 | 4 | 2013-06-17 | |richRemer/scoped-event-emitter| 0 | 0 | 4 | 2014-09-01 | |roderickObrist/event-emitter| 0 | 0 | 1 | 2014-03-19 | |rpstewart/EventEmitter| 0 | 0 | 8 | 2012-11-06 | |sergeyt/fogbus.io| 0 | 0 | 23 | 2014-07-16 | |shiroyasha/Shiro-EventEmitter| 0 | 0 | 7 | 2013-05-10 | |skerit/hawkevents| 0 | 0 | 2 | 2014-06-18 | |sosnowski/event-emitter-ng| 0 | 0 | 8 | 2013-02-11 | |stayradiated/signals| 0 | 0 | 32 | 2014-03-23 | |supershabam/pevents| 0 | 0 | 29 | 2013-12-04 | |thechriswalker/TriggerHappy| 0 | 0 | 1 | 2012-09-28 | |theotheu/eventEmitter| 0 | 0 | 1 | 2014-09-16 | |thiagoneves/event-emitter| 0 | 0 | 3 | 2014-07-22 | |thomaswelton/bower-event-emitter| 0 | 0 | 16 | 2013-10-24 | |tim-smart/node-superemitter| 0 | 0 | 6 | 2014-06-19 | |tomasperezv/event-emitter| 0 | 0 | 2 | 2013-10-20 | |tunderdomb/EventStation| 0 | 0 | 2 | 2014-06-16 | |tvsudhir/EventEmitter| 0 | 0 | 11 | 2014-07-30 | |yomotsu/PeriodicEventEmitter| 0 | 0 | 1 | 2014-08-11 | |zaphod1984/eventEmitterDemux| 0 | 0 | 8 | 2014-02-19 |