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))