var dispCbs = [];
var dispIns = [];
function Dispatcher(){
dispIns.push(this);
dispCbs.push({});
}
Dispatcher.prototype = {
on(type, cb){
let cbtypes = dispCbs[dispIns.indexOf(this)];
let cbs = cbtypes[type] = (cbtypes[type] || []);
if(!~cbs.indexOf(cb)){
cbs.push(cb);
}
},
off(type, cb){
let cbtypes = dispCbs[dispIns.indexOf(this)];
let cbs = cbtypes[type] = (cbtypes[type] || []);
let curTypeCbIdx = cbs.indexOf(cb);
if(~curTypeCbIdx){
cbs.splice(curTypeCbIdx, 1);
}
},
fire(type, ...args){
let cbtypes = dispCbs[dispIns.indexOf(this)];
let cbs = cbtypes[type] = (cbtypes[type] || []);
for(let i = 0; i < cbs.length; i++){
cbs[i].apply(null, args);
}
}
};
module.exports = Dispatcher;