함수의 매개변수 이름을 파싱하기 위해 자바스크립트 함수를 작성했는데, 코드는 다음과 같습니다.
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는 함수에서 현재 함수의 함수 이름을 가져옵니다.
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.
// 참고: 스택트레이스 내부 위치;
// [1]은 "getMethodName"이고, [2]는 이 메소드를 호출하는 메소드입니다.
public static String getMethodName() { StackTraceElement[] stacktrace = Thread.currentThread().getStackTrace(); StackTraceElement e = stacktrace[2]; String methodName = e.getMethodName(); return methodName; }
위 내용은 이 글에서 소개한 js의 함수의 모든 매개변수 이름을 가져오는 방법입니다. 이 글이 잘 작성되지 않았더라도 양해해 주시기 바랍니다.