Здравствуйте!
Написал подобный функционал:
class SomeClass{
// тут определенные условия когда должны запускаться коллбеки
eventTrigger(){
//...
this.onType1.bind(this)(data);
//...
//...
this.onType2.bind(this)(data);
//...
//...
this.onType3.bind(this)(data);
//...
}
// добавление коллбеков событий
on(event, callback){
switch (event) {
case 'eventType1':
this.callbacksType1.push(callback);
break;
case 'eventType2':
this.callbacksType2.push(callback);
break;
case 'eventType3':
this.callbacksType3.push(callback);
break;
}
}
// выполнение коллбеков для eventType1
onType1(...args){
if(this.callbacksType1.length)
for(let func of this.callbacksType1)
func.apply(this, args);
}
// выполнение коллбеков для eventType2
onType2(...args){
if(this.callbacksType2.length)
for(let func of this.callbacksType2)
func.apply(this, args);
}
// выполнение коллбеков для eventType3
onType3(...args){
if(this.callbacksType3.length)
for(let func of this.callbacksType3)
func.apply(this, args);
}
constructor(){
//...
this.callbacksType1 = [];
this.callbacksType2 = [];
this.callbacksType3 = [];
//...
}
}
const someClass = new SomeClass();
someClass.on('eventType1', (data)=> {
//...
console.log('eventType1 triggered', data);
});
someClass.on('eventType2', (data) => {
//...
console.log('eventType2 triggered', data);
});
someClass.on('eventType3', (data) => {
//...
console.log('eventType3 triggered', data);
});
Как все это упростить и обобщить, чтобы не создавать одинаковый код в функциях onType1, onType2, ...onTypeN ?