2012-12-07 3 views
1

가능한 중복 함수에서 함수 이름을 가져옵니다 : 나는 함수 자체에서 함수 이름을 얻으려면
Can I get the name of the currently running function in javascript?자체가

.

자바 스크립트 : 코드에서

Cube : { 
    profile : { 
     edit : function(){ 
      // Get function Path Cube.edit Here 
      alert(arguments.callee.name); // Not Working 
     } 
    } 
} 
+0

함수의 이름을 지정할 수 있습니다. edit : function edit() {...}' – elclanrs

+0

@Osiris이 질문을 읽습니다. 하지만 나는 내 대답을 얻지 못했습니다. 'alert (arguments.callee.name);'위의 코드 예제에서는 작동하지 않습니다. –

+0

@elclanrs : Internet Explorer 8 이하 버전에서는 [두 가지 기능] (http://blog.niftysnippets.org/2010/09/double-take.html)이 만들어집니다. –

답변

8

기능은 이름이없는이 조각은, 그것은 익명입니다. profile에 할당 된 속성에는 이름 (edit)이 있지만 기능은 없습니다. 아니요, 함수 개체에서 edit 또는 profile.edit 또는 Cube.profile.edit을 얻을 수있는 방법이 없습니다.

당신은 함수의 이름 부여 할 수 있습니다 :

Cube : { 

    profile: { 
     edit : function edit(){ 

     alert(arguments.callee.name); 

     } 
    } 
} 

을 ...하지만 IE8에 two separate function objects 및 이전 버전을 만들 것입니다 라는 이름의 함수식을 사용하고.

또한이 작업을 수행 할 수 있습니다

Cube : { 

    profile: { 
     edit : Cube_profile_edit 
    } 
} 
// ... 

function Cube_profile_edit(){ 

    alert(arguments.callee.name); 
} 

그러나, 위의 두 가지 문제 모두에 :

  1. 을 당신은 브라우저의 많은에 모두 매우 느립니다 arguments.callee를 사용하는 이며 strict mode에는 유효하지 않습니다.

  2. name 기능 개체의 속성이 비표준이므로 this answerFunction#toString의 결과를 구문 분석해야 할 필요가 있다고 말합니다. 문제는 Function#toString이고 또한이 아닌 것입니다 (그러나 모바일 브라우저를 제외하면 상당히 광범위하게 지원됨). 그런 다음 기능을 실제 이름을주고하지 않는

당신은 함수에 참조하는 속성에 대한 Cube 객체 그래프를 통해 검색하여 그 두 번째 문제를 피할 수 있지만, 여전히 arguments.callee를 사용하여 필요 (실시간 것을 사용 이름으로 검색 할 때 속성 경로를 찾습니다).