Skip to content

Instantly share code, notes, and snippets.

@catdad
Last active August 29, 2015 14:06
Show Gist options
  • Save catdad/9acd13dd3a8a34a79de6 to your computer and use it in GitHub Desktop.
Save catdad/9acd13dd3a8a34a79de6 to your computer and use it in GitHub Desktop.
A simple event emitter class.
var EventEmitter = function(){
var events = {};
this.on = function(name, callback){
name = name.toLowerCase();
events[name] = events[name] || [];
events[name].push(callback);
return this;
};
this.off = function(name, callback){
name = name.toLowerCase();
if (name in events === false) return this;
events[name].splice(events[name].indexOf(callback), 1);
return this;
};
this.once = function(name, callback){
var that = this;
function disposable(){
that.off(name, disposable);
callback.apply(that, arguments);
}
this.on(name, disposable);
return this;
};
this.trigger = function(name){
var that = this,
args = arguments;
name = name.toLowerCase();
if (name in events === false) return this;
events[name].forEach(function(fn){
fn.apply(that, [].slice.call(args, 1));
});
return this;
};
this.asyncTrigger = function(name){
var args = arguments,
that = this;
setTimeout(function(){
that.trigger.apply(that, args);
}, 0);
return this;
};
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment