>  기사  >  웹 프론트엔드  >  function_javascript의 모든 매개변수 이름을 가져오는 JavaScript 방법 팁

function_javascript의 모든 매개변수 이름을 가져오는 JavaScript 방법 팁

WBOY
WBOY원래의
2016-05-16 15:34:281545검색

함수의 매개변수 이름을 파싱하기 위해 자바스크립트 함수를 작성했는데, 코드는 다음과 같습니다.

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의 함수의 모든 매개변수 이름을 가져오는 방법입니다. 이 글이 잘 작성되지 않았더라도 양해해 주시기 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.