// Create an event bus function Bus() { let eventFuncObject={}; function on(eventName, eventFunc){ if(!eventFuncObject[eventName]){ eventFuncObject[eventName]=[]; } eventFuncObject[eventName].push(eventFunc); } function off(eventName){ delete eventFuncObject[eventName]; } function trigger(eventName){ let argumetsArry = []; eventFuncObject[eventName].map(eventFunc=>{ Object.keys(arguments).map(argKey=>{ if(argKey !== '0'){ argumetsArry.push(arguments[argKey]); } }) eventFunc(...argumetsArry); }); } this.on = on; this.off = off; this.trigger = trigger; } var handler = new Bus(); handler.on('click', function () { console.log('on click was triggered'); }) handler.on('click', function () { console.log('another handler'); }) handler.on('sum', function (a, b) { var sum = a + b; console.log(sum); }); handler.trigger('click'); // console.log's 2 statements handler.off('click'); // handler.trigger('click'); handler.trigger('sum',3,4,5); handler.trigger('sum',3,8,5,5); // nothing happens