开发者社区> 铁锚> 正文

JavaScript: 取得 function 的所有参数名

简介: 在阅读 promisify-node 源码的时候, 想看看作者是如何将基本的函数和对象转换为对应的 promised-based API 的。我很快意识到他们通过函数的签名来查找通用的回调参数名称, 如 callback 或者 cb。
+关注继续查看

在阅读 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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
深入理解Js里new Function语法
深入理解Js里new Function语法
44 0
JavaScript之function基础定义与调用
引入 前端人都多多少少听说过一句话:“HTML是网页的骨架,CSS是网页的皮囊,而JS是网页的灵魂”。 而在我们学习JS这一“灵魂”的同时,如果要给JS也找一个“灵魂”,我觉得就是接下来我们会一起学习的函数 之前的学习文章里我也曾提到过,一般我们不会嵌套太多层循环,如果有需要,我们更倾向于写一些自定义函数,然后以调用的方式来达到相应的目的 在大型开发中,我们也往往会采用定义函数并调用组件的形式来让我们代码的可读性更强。
32 0
JavaScript 然后遍历dom时报错 forEach is not a function
JavaScript 然后遍历dom时报错 forEach is not a function
110 0
JS:Function对象call、apply、bind改变this指向
JS:Function对象call、apply、bind改变this指向
20 0
JavaScript函数(Function)
JavaScript函数(Function) 函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块。
72 0
《JS原理、方法与实践》- JS function 类型对象
《JS原理、方法与实践》- JS function 类型对象
32 0
JavaScript 引擎和 Just-in-Time 编译概念,Hot Function 的简单介绍
JavaScript 引擎本身也是一种软件,它将您华丽的 JavaScript 代码行转换为我们的机器可执行的二进制代码。
71 0
JavaScript 引擎和 Just-in-Time 编译概念,Hot Function 的简单介绍
JavaScript 引擎和 Just-in-Time 编译概念,Hot Function 的简单介绍
42 0
使用JavaScript Function.prototype进行代码重构的一些例子
使用JavaScript Function.prototype进行代码重构的一些例子
73 0
JavaScript 引擎和 Just-in-Time 编译概念,Hot Function 的简单介绍
JavaScript 引擎和 Just-in-Time 编译概念,Hot Function 的简单介绍
65 0
+关注
铁锚
Java与数据库开发
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Javascript异步编程
立即下载
Javascript中的对象
立即下载
JS零基础入门教程(上册)
立即下载