К примеру, можно так. Создаем класс для регистрации событий и наследуемся от него.
class Event
{
events = {}
on(event, callback){
if(!(event in this.events)){
this.events[event] = [];
}
this.events[event].push(callback);
}
emit(event, ...args){
if(event in this.events){
this.events[event].forEach(callback => callback(...args));
}
}
}
Дальше, предположим, у нас главный класс наследуется от Event.
class Cselect extends Event
{
justDoSomething(){
this.emit('tick', 1, 2, 3);
}
}
И теперь мы можем использовать
var select = new Cselect;
select.on('tick', (a, b, c) => {
console.log(a, b, c);
});
select.justDoSomething();