イベント発火のパターン

$(function(){
    var HOGE_EVENTS = ['click', 'mouseup'];
    var Hoge = function(){
        this.events = {};
        for(var i=0;i<HOGE_EVENTS.length;i++) this.events[HOGE_EVENTS[i]] = [];
    };
    Hoge.prototype.on = function(ev, callback){
        if(ev in this.events) this.events[ev].push(callback);
    };
    Hoge.prototype.fire = function(ev){
        if(false == (ev in this.events) || this.events[ev].length < 1)) return;
        $.each(this.events[ev], function(index, callback){ callback(); });
    };
});