我在这里有一个有趣的问题。
需要什么...我需要实现一个可以在执行某些任意
自定义函数
之前和/或之后挂起处理程序的函数...
例如:
函数调用后输出日志条目
afterFunction(someUserFunction, function(){
console.log("Была вызвана функция " + someUserFunction.toString());
});
因此,在调用someUserFunction()日志之后,应该显示对该函数的调用记录。
此外,作为一个例子,可能有一个函数的执行时间的计算......
我不需要截取响应的参数和结果。
您只需要添加几个处理程序来执行传递的函数。
有什么工作选择吗?
如果不是,那么您也可以在答案中证明这一点。
更新 1:
- 不考虑直接在所需函数的参数中注册回调的选项。
- 目标函数可以是任意的。
- 目标函数必须作为参数传递。
- 因此,挂起处理程序的函数不知道什么目标函数会飞向它。
更新2:
- 在所有操作之后,函数调用应保持其原始形式,因此外观选项也不合适。
更新 3:
我还尝试重新定义该功能。坦率地说,这是最接近我需要的东西,但是,我也遇到了一些问题。
覆盖在这种情况下有效:
var a = function(){ console.log("original function"); };
a();
var old = a;
a = function(){
console.log("handler");
old();
};
a();
但这对我来说还不够……当我尝试将整个事情转移到一个将任意处理程序附加到任意函数的函数时,一切都停止工作了。
此代码不再有效:
var a = function(){console.log("original function")};
a();
var redefine = function(someFunction, someHandler){
var old = someFunction;
someFunction = function(){console.log("handler");old();};
}
redefine(a, function(){console.log("my handler")});
a();
在函数中添加两个额外的可选参数,可以获取回调的值。签入函数:如果参数是一个函数,则执行它。
请注意,您要覆盖的函数必须是全局可见的。