2014-06-22 5 views
0

(이하 "기능"프로토 타입 객체를 변경하여 아마도?) :자동으로 코드를 함수가 입력 될 때마다 디버깅 실행 나는 다음과 같은 기능을 달성하기 위해 노력하고있어

나는 기능, 경보 창을 호출 할 때마다 함수가 호출되기 전에 pop (함수가 호출되기 전에) 함수가 호출되었고 결국에는 더 많은 데이터 (누가 "이"가 누구인지, 누가 나를 호출했는지 등)를 알려줍니다.이 작업은 C++에서 쉽게 할 수 있지만, "Function"구조체 (멤버/메소드)를 어디에서나 찾을 수없는 것 같습니다. 말할 것도없이 google-ing은 아무런 이익이 없었습니다.

"Function"에 멤버를 추가 할 수 있었지만이 멤버는 나중에 만들어진 함수에 존재하지만 의도 한 기능을 훨씬 벗어났습니다.

내가 무엇을했는지 있습니다 :

Function.prototype.demo= function(){ alert("I'm on every function!")} 
function x(){alert("whatever")} 
x.demo() // alerts the "I'm on every function!" message 

이 내가 필요 것입니다 :

Function.prototype.FIRST_TO_BE_RAN=function(){alert("useful info here about me")} 
function x(){alert("whatever")}; 
x();// first the “useful info here about me” to be displayed, then the “whatever” 

을 그와 Function 객체 설명서/문서에 대한 링크가 감사하겠습니다을 할 수있는 방법 .

+1

"이 작업은 C++에서 쉽게 수행 할 수 있지만"C++에서 어떻게 수행할까요? 나는 어떤 방식 으로든 몰라, 아마도 당신이 솔루션을 허용하고있는 무언가가 내가 고려하고 있지 않다는 것을 알고 있습니다. – user2357112

+0

... C++에서 여러 가지 방법이 있습니다 : 가장 기본적인 것, "construct 이벤트"에서 무엇이든 표시하는 클래스 생성자 사용, 함수에 대한 포인터를 사용하여 다른 함수보다 먼저 사용자 정의 함수/동적 함수 실행을 "직렬화" 동적 인 실행을 달성하기위한 포인터 함수의 배열 스타일을 만드는 등등 ... – root

+0

@ write2july : 자바 스크립트에서 생성자를 사용할 수도 있습니다. – zerkms

답변

-1

그래서 해결책이 없지만 여기서 생각해야 할 고차원 개념이 있습니다.

내가 될 함수 원형 변경

기능 랩퍼 대신

그래서 함수 {A, B, C, D ...}

해주기 기능 '도달 가능한 래퍼 함수 (인 'call {Function {a, b, c, d ....} 및 PreFunction {일반적인 사전 기능 ...}}

각 함수 호출은 실제로 함수 preCall과 만난 다음 공통 항목을 수행 한 다음 리디렉션합니다. 실제 함수 호출

우리가 필요로하는 언어는 컨트롤러 패턴 (위에서 막연하게 설명 됨)입니다.

1

JavaScript에서 수행하려는 작업을 신뢰할 수있는 방법은 없습니다. 다음 Function.prototype.call을 덮어 그러나 나는 천국 '수

var z = myFunctionCall(a, b, c); 

var z = myFunctionCall.call(null, a, b, c); 

에 : 당신이 쓰기를 다시하고자하는 경우

/코드의 일부를 추하게, 당신의 모든 인스턴스를 변경할 수 있습니다 모든 브라우저에서이를 테스트했습니다.

또 다른 옵션은, 당신의 코드베이스에 따라

function <name>(<arguments>) <whitespace> { <whitespace> alert("Entering function <name"); 

여전히 많이있을 것입니다

function <name>(<arguments>) <whitespace> { <whitespace> 

의 모든 인스턴스를 검색 및 바꾸기 위해 편집기 도구를 사용하는 것입니다 수동 정리.

오류 메시지에서 함수 이름이나 줄 번호를 반환하지 않은 IE 확장을 디버깅 할 때 두 번째 방법은 내가 한 것입니다.

관련 문제