JSFiddle - React, Tailwind, and code Playground

HTML

<input type="button" value="next" onclick="javascript:myApp.next()"/>
<input type="button" value="reset" onclick="javascript:myApp.reset()"/>

JavaScript

window.myApp = {};
(function(context) {
    var id = 0;

    var callbacks = {};

    context.next = function() {
        id++;
        doCallbacks('next', {id: id});
        return id;
    };

    context.setCallback = function(event, f) {
        if(!callbacks[event] || !callbacks[event] instanceof Array) {
            callbacks[event] = [];
        }
        callbacks[event].push(f);
    }

    context.reset = function() {
        id = 0;
        doCallbacks('reset');
    }

    function doCallbacks(key, event) {
        if(callbacks[key] && callbacks[key] instanceof Array) {
            for(var i=0; i < callbacks[key].length; i++) {
                callbacks[key][i](event);
            }
        }
    }
})(myApp);

myApp.setCallback('next', function() {
    alert('First callback on next');
});

myApp.setCallback('next', function(event) {
    alert('second callback on next, id is ' + event.id);
});

myApp.setCallback('reset', function() {
    alert('callback on reset');
});