JavaScript: 取得 function 的所有参数名

在阅读 promisify-node 源码的时候, 想看看作者是如何将基本的函数和对象转换为对应的 promised-based API 的。我很快意识到他们通过函数的签名来查找通用的回调参数名称, 如 callback 或者 cb。代码看起来有点古怪但确实很有效。【注: 新一代的JS框架大多采用这种探测策略,如 AngularJS

我写了一个 JavaScrip t函数来解析函数的参数名称, 代码如下:

function getArgs(func) {
  // 先用正则匹配,取得符合参数模式的字符串.
  // 第一个分组是这个:  ([^)]*) 非右括号的任意字符
  var args = func.toString().match(/function\s.*?\(([^)]*)\)/)[1];

  // 用逗号来分隔参数(arguments string).
  return args.split(",").map(function(arg) {
    // 去除注释(inline comments)以及空格
    return arg.replace(/\/\*.*\*\//, "").trim();
  }).filter(function(arg) {
    // 确保没有 undefined.
    return arg;
  });
}

上面是检测的函数, 示例代码如下:

function myCustomFn(arg1, arg2,arg3) {
  // ...
}

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

正则表达式(regular expression) 是个好东西吗? 别的我不知道, 但在适当的场景用起来还是很给力的!

附带一个Java取得当前函数名的方法: Java 在函数中获取当前函数的函数名

// 注意: stacktrace里面的位置;
// [1] 是“getMethodName”, [2] 是调用此方法的method 
public static String getMethodName() {  
    StackTraceElement[] stacktrace = Thread.currentThread().getStackTrace();  
    StackTraceElement e = stacktrace[2];  
    String methodName = e.getMethodName();  
    return methodName;  
}  

原文链接: Detect Function Argument Names with JavaScript

原文日期: 2015年10月21日

翻译日期: 2015年10月26日

翻译人员: 铁锚 http://blog.csdn.net/renfufei

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值