Function.kwargs

by seanmonstar

JavaScript

Function.implement('kwargs', function() {
    var that = this,
        argNames = this.toString().match(/\(([^\)]+)/)[1];
    
    argNames = argNames ? argNames.split(',').map(String.trim) : [];
    
    return function() {
        var args = Array.from(arguments);
        if (args.length && (args.length < that.length)) {
            var kwargs = args.pop();
            if (typeOf(kwargs) == 'object') {
                for (var i = 0; i < argNames.length; i++) {
                    if(argNames[i] in kwargs) {
                        args[i] = kwargs[argNames[i]];
                    }
                }
            } else {
                args.push(kwargs);
            }
        }
      
        that.apply(that, args);
    };
});

var example = function(alpha, bravo, charlie) {
    console.log(alpha + ' ' + bravo + ' ' + charlie);
}.kwargs();

example();
example('hello', 'world', '!');
example({alpha: 'goodbye', charlie: 'world', bravo: 'cruel'});
example('sup', { charlie: 'dog' });