最近看到一个 Node.JS 程序, https://github.com/nodegit/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"]
你会发现正则表达式是一个很强大的工具. 这个函数究竟有大多用处还不好说, 但当你需要一个这样的函数时, 它就必不可少了.
来源: http://www.webhek.com/post/promisify-node.html