检查调用的函数

时间:2013-11-04 18:28:51

标签: javascript javascript-events

只是想知道在调用函数时是否还有一些代码,而不是将代码添加到函数中,例如:

function doSomething(){
    //Do something
}

//Code to call when doSomething is called

4 个答案:

答案 0 :(得分:3)

您可以包装该功能:

(function(){
   var oldFunction = doSomething;
   doSomething = function(){
       // do something else
       oldFunction.apply(this, arguments);
   }
})();

我在这里使用IIFE只是为了避免污染全局命名空间,它是附件。

答案 1 :(得分:2)

嗯,是的,实际上并不难做到。关键是函数的名称只是一个像其他任何名称一样的标识符。如果您愿意,可以重新定义。

var oldFn = doSomething;
doSomething = function() {
    // code to run before the old function

    return oldFn.apply(this, arguments);

    // code to run after the old function
};

请注意,最好是oldFn.apply(this, arguments),而不仅仅是oldFn。在许多情况下,它无关紧要,但上下文(即函数内的this的值)和参数可能很重要。使用apply表示传递它们,就像直接调用oldFn一样。

答案 2 :(得分:0)

如下:

function doSomething(){
     doSomething.called = true;
}

//call?
doSomething();

if(doSomething.called) {
   //Code to call when doSomething is called
}

答案 3 :(得分:0)

我知道你说你不想修改原来的功能,但考虑添加一个回调。然后,您可以根据函数中的不同结果执行代码(例如onSucess和onError):

function doSomething(onSuccess, onError){
    try {
        throw "this is an error";
        if(onSuccess) {
            onSuccess();
        }
    } catch(err) {
        if(onError) {
            onError(err);
        }
    }
}

然后,当您致电doSomething时,您可以指定要使用内联函数完成的操作:

doSomething(function() {
    console.log("doSomething() success");
}, function(err) {
    console.log("doSomething() error: " + err);
});