JSFiddle - React, Tailwind, and code Playground
HTML
<button class="btn">Click</button>
JavaScript
class Event {
constructor() {
this.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))
}
}
}
class Btn extends Event {
constructor() {
super()
this.btn = document.querySelector('.btn')
this.btn.addEventListener('click', () => {
this.emit('clicked', 'lalalalal')
})
}
}
const btn = new Btn()
btn.on('clicked', e => console.log(e))