2011-09-20 4 views
1

많은 함수와 함수 호출로 프로그램을 작성했습니다. 모든 함수 호출 직전에 코드를 호출하고 싶습니다. 예를 들어, 함수가 호출 될 때마다 콘솔 로그가 표시됩니다.함수가 호출 될 때마다 실행될 코드

저는 이것을 한 번만 쓰고 싶습니다. 모든 함수 선언을 거치지 마십시오. 이 내용은 CSS pseudo elements:before:after과 비슷하지만 JavaScript의 함수 호출에 적용됩니다.

+1

이 단지 디버깅 아니면 당신은 몇 가지 더 깊은 목적이 무엇입니까? – hugomg

+0

모든 함수 호출시 1ms를 주입하여 DOM 재 페인트가 원활하게 수행되도록합니다. – Randomblue

+1

자바 스크립트에는 쉽게 할 수있는 휴면 기능이 없습니다. * 모든 함수가 변경 될 필요는 없습니다 (다시 그리는 것만). 그리고 마침내 이것은 너무 해킹 된 것처럼 들립니다. 문제의 왕을 해결할 더 표준적인 방법이 있습니다. – hugomg

답변

3

이런 식으로 할 수있는 기본 제공 방법이 없다고 생각합니다. Firebug과 같은 자바 스크립트 디버거를 사용하고 문제를 일으키는 기능에 중단 점을 설정하는 것은 어떻습니까?

+0

이렇게 할 수있는 방법이 있더라도 프로퍼티 디버거보다 낫다고 생각합니다. – hugomg

+0

동의. AFAIK 방법은 없습니다 – Marshall

+0

일단 작업을 배우면 Firebug가 적절한 디버거입니다. – orlp

0

전 누구도 본 적이 없으므로 불가능하다고 생각합니다.

나는 빠른 Google 검색을 수행했으며 아무 도움도 돌아 오지 않았습니다. 그냥 상속,하지만 난 그것이 도움이되는 방법을 볼 수 없습니다.

bdesham처럼 보입니다.

1

나는 자동으로 콘솔의 모든 기능에 분출 주입하는 방법을 모르겠어요. 그러나 콘솔에 로깅을 퍼 뜨리는 기능에 대해 명시하고 싶다면 클로저를 사용할 수 있습니다.

function ConsoleLogWrap(obj, funcname, msg) { 
    var xmsg = msg; 
    var xfuncname = funcname; 
    var xobj = obj; 

    obj[funcname+"$"] = obj[funcname]; 
    obj[funcname] = function() { 

     try { 
      console.log(xmsg); 
     } catch(e) { 
     } 

     xobj[xfuncname+"$"](arguments); 

    }; 

} 


function Addition(x, y) { 
    return x + y; 
} 

ConsoleLogWrap(window, "Addition", "Addition was called"); 

window.Addition(5,5); // this will spew out "Addition was called" and return the result of 5+5. 
+0

원래 게시 한 내용 중에는 많은 버그가 있습니다. 위의 작동하지 않습니다! – selbie

1

Function.prototype을 확장하여 만드는 모든 기능에 메소드를 추가 할 수 있습니다. 다음이처럼 호출 ...

Function.prototype.makeAsync = function() { 
    var func = this; 
    var args = arguments; 
    setTimeout(function() { 
     func.call.apply(func, args); 
    }, 1); 
}; 

: 당신이 당신의 의견에 나타내는 것 같은

는이 같은 기능을 추가 할 수 있습니다, 비동기 기능을 실행할 수 있도록하려면

function my_func(a, b, c) { 
    console.log(this); 
    console.log(a, b, c); 
} 

my_func.makeAsync(element, 1, 2, 3); 

makeAsync에 전달하는 첫 번째 인수는 사용자가 호출하는 함수의 값인 this이됩니다.

DEMO :http://jsfiddle.net/3kuad/

관련 문제