每次调用函数时要执行的代码

时间:2011-09-20 17:39:38

标签: javascript

我编写了一个包含大量函数和函数调用的程序。我希望能够在每个函数调用之前调用代码。例如,每次调用函数时,都要使用控制台日志

console.log("A function has been called!");

我想一劳永逸地写这个,不要经历每一个函数声明。我想这与CSS pseudo elements :before:after的精神相似,但适用于JavaScript中的函数调用。

5 个答案:

答案 0 :(得分:3)

我认为没有任何内置方法可以做这样的事情。为什么不使用像Firebug这样的JavaScript调试器,并在你认为可能给你带来麻烦的函数上设置断点?

答案 1 :(得分:2)

答案 2 :(得分:1)

我不知道如何为每个功能自动注入控制台spew。但是如果你想明确哪些函数会将日志记录到控制台,你可能会使用一个闭包。

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.

答案 3 :(得分: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/

答案 4 :(得分:0)

我以前从未见过有人这样做过,所以我认为这是不可能的。

我做了一个快速的谷歌搜索,没有任何有用的回来。只是继承,但我不明白这是多么有用。

看起来bdesham打败了我!