博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript: 取得 function 的所有参数名
阅读量:6198 次
发布时间:2019-06-21

本文共 1115 字,大约阅读时间需要 3 分钟。

在阅读 源码的时候, 想看看作者是如何将基本的函数和对象转换为对应的 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取得当前函数名的方法:

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

原文链接:

原文日期: 2015年10月21日

翻译日期: 2015年10月26日

翻译人员:

转载地址:http://bmnca.baihongyu.com/

你可能感兴趣的文章
GlbLib函数库手册
查看>>
spring security3.x学习(2)_认证和授权&运行第一个项目
查看>>
做程序员10年有感,程序员必须要懂的---转自java诺曼底_kleen
查看>>
使用opencv显示一幅图像的每个像素值
查看>>
web-socket地址存储
查看>>
JQ实现鼠标经过提示效果
查看>>
Code::Blocks使用教程
查看>>
activeMQ Topic与队列2种消息发送模式
查看>>
Linux基础 -- 文件系统操作与磁盘管理
查看>>
用SSH连接远端服务器
查看>>
理解java中反射,区别Class.forName(),Class.forName().instance() ,new
查看>>
svn: Server sent unexpected return value (502 B...
查看>>
【工具使用系列】关于 MATLAB 遗传算法与直接搜索工具箱,你需要知道的事
查看>>
Spring MVC Controller中解析GET方式的中文参数会乱码的问题
查看>>
django集成已有的数据库和应用
查看>>
Android中Cursor类的概念和用法
查看>>
去除ecshop v2.7.3头部 页脚版权和页面随机显示“Powered by ecshop
查看>>
图文详解:在Windows XP安装IIS
查看>>
理解矩阵——GOOD
查看>>
将项目导出成jar包
查看>>