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();
});
})();