2012-10-10 4 views
3

JavaScript에서 PHP의 __FUNCTION__과 동일한 기능을 찾고 있습니다. 현재 함수의 이름을 알 수 있습니다. 예 :JavaScript에서 PHP의`__FUNCTION__`에 해당하는 것이 있습니까?

function foo(){ 
    console.log(__FUNCTION__); // "foo" would be logged to the console 
} 

JavaScript로이 작업을 수행 할 수있는 방법이 있습니까? __FUNCTION__과 유사한 마법의 변수 또는 다른 해결 방법을 사용 하시겠습니까? 현재 달성 할 수있는 방법이 없다면 으로 계획 되었습니까?

+5

해결 방법은'arguments.callee.name' 일 수 있습니다. – Bergi

+0

@Bergi는 솔루션과 비슷하다고 말합니다. ECMAScript의 제 5 판에서는 strict 모드에서 arguments.callee()를 사용하지 못하도록 제한하고 있습니다.] (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Functions_and_function_scope/arguments)/callee) -하지만 당신의 코드가 strict 모드를 선택하는 경우에만 그 의미가 있다고 생각합니다. –

+0

또 다른 질문은 함수의 이름을 알아야하는 이유 일 수 있습니다. 범위에 따라 함수 이름이 윈도우 객체에 등록 될 수 있습니다. 클로저 내부에 갇혀있을 수 있습니다 ... 처음에는 올바르게 작동하려면 함수의 이름을 사용해야하는 케이스가 궁금합니다. (** 유스 케이스가있을 수도 있다는 것을 알고 있습니다. 조금 더 많은 컨텍스트를 사용하여 문제에 접근하는 다른 방법이 있을지 궁금합니다.) –

답변

3

callee propertyarguments object을 통해 현재 실행중인 기능에 대한 참조를 얻을 수 있습니다. ES5.1 strict 모드에서는 더 이상 사용되지 않습니다.

그런 다음 (비표준) name of the function을 얻을 수 있습니다. 이것은 단지 객체의 속성으로 익명 기능 (IE의 알려진 버그) 함수 선언 및 named function expressions을 위해 작동하지만,하지 않는 것이주의 :

var myObj = { 
    method: function() { // unnamed! 
     return arguments.callee.name || "anonymous"; 
    } 
}; 
myObj.method(); // "anonymous" 

을 나 자신이 전체를 붙이는, 디버깅/오류 문에 정적 문자열을 사용하기위한 함수의 네임 스페이스는 코드에서 쉽게 찾을 수 있습니다.

관련 문제