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