Function.params
by James Greene
JavaScript
(function() {
var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg;
var FN_ARGS = /^function\s*[^\(]*\(\s*([^\)]*)\s*\)/m;
var FN_ARG_SPLIT = /\s*,\s*/;
Object.defineProperty(Function, 'params', {
value: function Function$params(fn) {
var paramNames, fnText, argDecl;
if (typeof fn !== 'function') {
throw new TypeError('Function.params called on non-function');
}
if (fn.length) {
fnText = ('' + fn).replace(STRIP_COMMENTS, '');
argDecl = fnText.match(FN_ARGS)[1];
paramNames = argDecl.split(FN_ARG_SPLIT);
}
else {
paramNames = [];
}
return paramNames;
}
});
})();