2012-06-15 5 views
5

나는 자바 스크립트의 핵심 방법 중 하나를 다시 작성하고 다시 한 현재 실행중인 함수의 이름을 가져올 수 :자바 스크립트 메타 프로그래밍 : 동적으로

Element.prototype._removeChild = Element.prototype.removeChild; 
Element.prototype.removeChild = function(){ 
    callback(); 
    this._removeChild.apply(this,arguments); 
} 

나는 동적으로 (이 경우 "로 removeChild"에서) 메소드의 이름을 얻으려면 함수 내부에서 동적으로 재 작성됩니다. arguments.callee.name을 사용하지만 아무것도 반환하지 않는 것처럼 보입니다. 단지 익명의 기능이라고 생각합니다. 익명 함수가 할당되는 함수의 이름은 어떻게 얻을 수 있습니까?

+4

자바 스크립트가 방법이 없습니다 :

당신은 그러나 기능 당신이 arguments.callee.name으로 액세스 할 수있는 적절한 이름을 부여 할 수 있습니다. 특성에 지정된 기능 만. 이 경우, 'Element.prototype.removeChild'는 할당 된 하나의 속성이며, 동시에 다른 곳에 할당 될 수도 있습니다. 함수의 이름이 아니며 이름이 없습니다. 이 함수는 할당 된 속성 수나 할당 된 속성을 모릅니다. – Esailija

답변

5

은 익명 기능 인입니다. 이 익명의 함수를 Element.prototype.removeChild 속성에 할당하는 것만으로 그 속성을 함수의 이름으로 만들지는 않습니다. 같은 함수를 여러 변수와 속성에 할당 할 수 있으며 호출 된 이름을 알 수있는 방법이 없습니다.

Element.prototype.removeChild = function removeChild() { 
    .... 
} 
+0

ahhhh는 100 % 의미가 있습니다. 감사! – user730569

+1

+1 이것은 함수가'removeChild'에 의해 스스로를 참조 할 수 있기 때문에 완벽 합니다만,'removeChild'는 여전히 함수 밖에서 정의되지 않습니다. JavaScript를 올바르게 구현하지 않는 IE 8 이하에서는 예외입니다. IE 8에서'removeChild'는 당신이 모든 것을 둘러 싸지 않는 한 외부 범위 (전역 적으로)에 노출됩니다 :'(function() {Element.prototype.removeChild = function removeChild() {...})();' – Paulpro

+0

함수에 이름을 부여했기 때문에,''arguments.callee'' 대신에 이름을 사용할 수 있습니다. 하지만 다시,'removeChild.name' ... : P – Esailija

관련 문제