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


})();