JavaScript 提取函数参数名的实现与 Java 获取当前方法名技巧
本文介绍如何利用 JavaScript 的正则表达式提取函数定义中的参数名称,并提供 Java 中通过 StackTraceElement 数组索引获取当前调用方法名的实现代码。文章包含完整的 JS 解析逻辑与 Java 测试示例,详细说明了数组索引偏移量的注意事项,帮助开发者在元数据获取场景中准确定位函数签名信息。
JavaScript 提取函数参数名实现
这里展示一段用于解析函数参数名称的 JavaScript 代码实现。
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));
正则表达式在合适的场景下确实非常高效,尽管其复杂性常被讨论,但在处理此类字符串解析任务时表现优异。
Java 获取当前方法名技巧
此外,补充一种在 Java 中获取当前执行方法名的方式:Java 在函数中获取当前函数的函数名。
public class Test {
private String getMethodName() {
StackTraceElement[] stacktrace = Thread.currentThread().getStackTrace();
StackTraceElement e = stacktrace[2];
String methodName = e.getMethodName();
return methodName;
}
public void getXXX() {
String methodName = getMethodName();
System.out.println(methodName);
}
public void getYYY() {
String methodName = getMethodName();
System.out.println(methodName);
}
public static void main(String[] args) {
Test test = new Test();
test.getXXX();
test.getYYY();
}
}
【运行结果】
getXXX getYYY
【注意】
代码第5行中,stacktrace[0].getMethodName() 返回的是 getStackTrace,stacktrace[1].getMethodName() 返回的是 getMethodName,而 stacktrace[2].getMethodName() 才是真正调用 getMethodName 的那个函数的名称。
// 注意: stacktrace里面的位置; // [1] 是“getMethodName”, [2] 是调用此方法的method
public static String getMethodName() {
StackTraceElement[] stacktrace = Thread.currentThread().getStackTrace();
StackTraceElement e = stacktrace[2];
String methodName = e.getMethodName();
return methodName;
}
以上介绍了 JavaScript 获取 function 所有参数名的方法,以及 Java 获取当前函数名的相关技巧。本文内容如有不足之处,敬请谅解,欢迎提出宝贵意见。
JS处理含Emoji或中文的字符串转数组乱码问题
2026-11-05 16:12:28
JS怎么使用展开运算符合并对象
2026-11-05 14:42:18
ES6+环境下判断JS对象为空的简洁写法
2026-11-05 12:12:23
怎么通过replacer函数自定义JS中JSON的格式化输出
2026-11-05 11:19:44
JS正则表达式基础:字面量与RegExp构造函数的区别及常用元字符
2026-11-05 11:16:58
