用JavaScript获取函数参数名称

最近看到一个nodejs程序,promisify-node,它能够将一个普通的函数或对象转变成promised方式的API。经过查看源代码,发现它是通过读取函数的参数来寻找回调函数式的参数。这种方式看起来有点怪,但有时候很有用。

我研究了一下它的能够读取函数参数名的JavaScript函数,下面就是:

function getArgs(func) {
  // 首先匹配函数括弧里的参数
  var args = func.toString().match(/function\s.*?\(([^)]*)\)/)[1];
 
  // 分解参数成数组
  return args.split(",").map(function(arg) {
    // 去空格和内联注释
    return arg.replace(/\/\*.*\*\//, "").trim();
  }).filter(function(arg) {
    // 确保没有undefineds
    return arg;
  });
}

现在,有了上面的函数,下面我们再写一个测试函数,看看它的使用方法:

function myCustomFn(arg1, arg2,arg3) {
  
}

console.log(getArgs(myCustomFn)); // ["arg1", "arg2", "arg3"]

你会发现正则表达式是一个很强大的工具。这个函数究竟有大多用处还不好说,但当你需要一个这样的函数时,它就必不可少了。

一条回应:“用JavaScript获取函数参数名称”

  1. 也可以试一下这个写法
    function funparams(func)
    {
    return func.toString().substr(func.toString().indexOf(‘(‘)+1,func.toString().indexOf(‘)’)-func.toString().indexOf(‘(‘)-1);
    }

发表评论

电子邮件地址不会被公开。 必填项已用*标注

壹加壹等于