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