Skip to content

Instantly share code, notes, and snippets.

@kevincennis
Last active August 29, 2015 14:14
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kevincennis/98b0451ed0631db2f472 to your computer and use it in GitHub Desktop.
Save kevincennis/98b0451ed0631db2f472 to your computer and use it in GitHub Desktop.
EventEmitter
var EventEmitter = (function() {
var cache = new WeakMap();
function EventEmitter() {
cache.set( this, {} );
}
EventEmitter.prototype = {
on: function( evt, fn ) {
var hash = cache.get( this );
( hash[ evt ] || ( hash[ evt ] = [] ) ).push( fn );
return this;
},
emit: function( evt ) {
var args = Array.prototype.slice.call( arguments, 1 ),
events = cache.get( this )[ evt ],
len, i;
if ( events ) {
for ( i = 0, len = events.length; i < len; ++i ) {
events[ i ].apply( this, args );
}
}
return this;
},
off: function( evt, fn ) {
var hash = cache.get( this ),
events = hash[ evt ],
keep, len, i;
if ( !evt ) {
cache.set( this, {} );
}
else if ( events && !fn ) {
delete hash[ evt ];
}
else if ( events ) {
keep = [];
for ( i = 0, len = events.length; i < len; ++i ) {
if ( events[ i ] !== fn ) {
keep.push( events[ i ] );
}
}
hash[ evt ] = keep;
}
return this;
}
};
return EventEmitter;
}());
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment