只是想知道在调用函数时是否会触发一些代码,而无需将代码添加到函数中,例如:
function doSomething(){
//Do something
}
//Code to call when doSomething is called
只是想知道在调用函数时是否会触发一些代码,而无需将代码添加到函数中,例如:
function doSomething(){
//Do something
}
//Code to call when doSomething is called
您可以包装函数:
(function(){
var oldFunction = doSomething;
doSomething = function(){
// do something else
oldFunction.apply(this, arguments);
}
})();
我在这里使用IIFE只是为了避免污染全局命名空间,它是附件。
嗯,是的,这实际上并不难做到。关键是函数的名称只是一个标识符,就像其他任何标识符一样。如果你愿意,你可以重新定义它。
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
函数内部的值)和参数可能很重要。Usingapply
意味着它们被传递,就像oldFn
被直接调用一样。
怎么样的东西:
function doSomething(){
doSomething.called = true;
}
//call?
doSomething();
if(doSomething.called) {
//Code to call when doSomething is called
}
我知道您说您不想修改原始函数,但考虑添加回调。然后你可以在你的函数中根据不同的结果执行代码(例如 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);
});