JSFiddle - React, Tailwind, and code Playground

by Aaron Zhang

JavaScript

(function (winidow) {
    'use strict';
    window.Injector = function (injectables) {
        this.injectables = injectables;
    };
    Injector.regx = /function.*\(([\S\s]*?)\)/m;
    Injector.prototype.setInjectables = function (injectables) {
        this.injectables = injectables;
    };

    Injector.prototype.inject = function (functionToInject, that) {
        var functionString = functionToInject.toString();
        var variables = functionString.match(Injector.regx);
        if (!variables) {
            throw 'syntax error, or you did not pass in a function';
        }
        variables = variables[1].split(',');

        var argumentlist = [];
        for (var i = 0; i < variables.length; ++i) {
            variables[i] = variables[i].trim();
            argumentlist.push(this.injectables[variables[i]]);
        }
        return functionToInject.apply(that || this, argumentlist);
    };
})(window);
(function () {
    'use strict';
    var myInjector = function () {
        function sayHi() {
            alert('Hi!');
        }

        function sayBye() {
            alert('Bye!');
        }

        var myInjector = new Injector({
            hi: sayHi,
            bye: sayBye
        });
        return myInjector;
    }();

    myInjector.inject(function (glow, hi, bye) {
        hi();
        bye();
    });

})();