我编写了一个包含大量函数和函数调用的程序。我希望能够在每个函数调用之前调用代码。例如,每次调用函数时,都要使用控制台日志
console.log("A function has been called!");
我想一劳永逸地写这个,不要经历每一个函数声明。我想这与CSS pseudo elements :before
和:after
的精神相似,但适用于JavaScript中的函数调用。
答案 0 :(得分:3)
我认为没有任何内置方法可以做这样的事情。为什么不使用像Firebug这样的JavaScript调试器,并在你认为可能给你带来麻烦的函数上设置断点?
答案 1 :(得分:2)
您基本上在JavaScript中寻找Aspect-Oriented Programming。请参阅Javascript AOP libraries。
更多问题:https://stackoverflow.com/questions/tagged/javascript+aop
答案 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
值。
答案 4 :(得分:0)
我以前从未见过有人这样做过,所以我认为这是不可能的。
我做了一个快速的谷歌搜索,没有任何有用的回来。只是继承,但我不明白这是多么有用。
看起来bdesham打败了我!