30 lines
656 B
JavaScript
30 lines
656 B
JavaScript
var FUNCTIONS = {};
|
|
|
|
/**
|
|
* Create a function wrapper that specifies the argument length.
|
|
*
|
|
* @param {number} arity
|
|
* @param {Function} fn
|
|
* @return {Function}
|
|
*/
|
|
module.exports = function (arity, fn) {
|
|
if (!FUNCTIONS[arity]) {
|
|
var params = [];
|
|
|
|
if (typeof arity !== 'number') {
|
|
throw new TypeError('Expected arity to be a number, got ' + arity);
|
|
}
|
|
|
|
for (var i = 0; i < arity; i++) {
|
|
params.push('_' + i);
|
|
}
|
|
|
|
FUNCTIONS[arity] = new Function(
|
|
'fn',
|
|
'return function arity' + arity + ' (' + params.join(', ') + ') { return fn.apply(this, arguments); }'
|
|
);
|
|
}
|
|
|
|
return FUNCTIONS[arity](fn);
|
|
};
|