Skip to content

Instantly share code, notes, and snippets.

@ccnixon
Created December 12, 2015 17:23
Show Gist options
  • Save ccnixon/6f417cf4ace35e742060 to your computer and use it in GitHub Desktop.
Save ccnixon/6f417cf4ace35e742060 to your computer and use it in GitHub Desktop.
Make an eventing system mix-in that adds .trigger() and .on() to any input object.
/*
Example usage:
var obj = mixEvents({ name: 'Alice', age: 30 });
obj.on('ageChange', function(){ // On takes an event name and a callback function
console.log('Age changed');
});
obj.age++;
obj.trigger('ageChange'); // This should call our callback! Should log 'age changed'.
*/
var mixEvents = function(obj) {
var events = {};
obj.trigger = function (event) {
if(!events[event]) {
return;
}
else {
var args = Array.prototype.slice.call(arguments).slice(1);
events[event].forEach(function(callback){
!args.length ? callback() : callback.apply(null, args)
})
}
};
// Register a callback to be fired on this event.
obj.on = function (event, callback) {
!events[event] ? events[event] = [callback] : events[event].push(callback)
};
return obj;
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment