JSFiddle - React, Tailwind, and code Playground

by Farzad YZ

JavaScript

function eventEmitter(all) {
  all = all || {};

  return {
    on(type, handler) {
        (all[type] || (all[type] = [])).push(handler);
      },
      off(type, handler) {
        all[type] && all[type].splice(all[type].indexOf(handler), 1);
      },
      emit(type, evt) {
      	var len = all.length, handlers = all[type].slice();
        for (var i = 0; i < len; i++) {
        	handlers[i](evt);
        }
      }
  };
}

var events = Object.create(null);
var emitter = eventEmitter(events);

emitter.on('test', function fn1() {
  console.log('Event1');
  emitter.off('test', fn1);
});
emitter.on('test', function fn2() {
  console.log('Event2');
  emitter.off('test', fn2);
});

emitter.emit('test')