只是想知道在调用函数时是否还有一些代码,而不是将代码添加到函数中,例如:
function doSomething(){
//Do something
}
//Code to call when doSomething is called
答案 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);
});