JSFiddle - React, Tailwind, and code Playground

JavaScript

Function.prototype.execute = (function() {
    var pattern = /function[^(]*\(([^)]*)\)/;

    return function() {
        var args = this.toString().match(pattern)[1].split(/,\s*/);
        var named_params = arguments[arguments.length - 1];
        if (typeof named_params === 'object') {
            var params = [].slice.call(arguments, 0, -1);
            if (params.length < args.length) {
                for (var i = params.length, l = args.length; i < l; i++) {
                    params.push(named_params[args[i]]);
                }
                return this.apply(null, params);
            }
        }
        return this.apply(null, arguments);
    };
}());


function foo(a, b, c) {
    console.log('a is ' + a, ' | b is ' + b, ' | c is ' + c);
};

foo.execute(1, 2, 3);
foo.execute(1, { b: 2, c: 3});
foo.execute(1, {c: 3});
foo.execute({a: 1,c: 3});