最近看到一个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"]
你会发现正则表达式是一个很强大的工具。这个函数究竟有大多用处还不好说,但当你需要一个这样的函数时,它就必不可少了。