我已经编写了一个包含很多函数和函数调用的程序。我希望能够在每个函数调用之前调用代码。例如,每次调用某个函数时,都要有控制台日志每次调用一个函数都要执行的代码
console.log("A function has been called!");
我想一劳永逸地写这个,而不是经过每个函数声明。我想这与CSS pseudo elements:before
和:after
的精神类似,但应用于JavaScript中的函数调用。
我已经编写了一个包含很多函数和函数调用的程序。我希望能够在每个函数调用之前调用代码。例如,每次调用某个函数时,都要有控制台日志每次调用一个函数都要执行的代码
console.log("A function has been called!");
我想一劳永逸地写这个,而不是经过每个函数声明。我想这与CSS pseudo elements:before
和:after
的精神类似,但应用于JavaScript中的函数调用。
您基本上正在寻找JavaScript中的Aspect-Oriented Programming。请参阅Javascript AOP libraries。
更多问题:https://stackoverflow.com/questions/tagged/javascript+aop
我从来没有见过任何人这样做过,所以我假设这是不可能的。
我做了一个快速的谷歌搜索,没有什么有用的回来。只是继承,但我不明白这特别有用。
看起来像bdesham打我吧!
我不知道如何自动注入控制台喷涌为每个函数。但是如果你想明确哪些函数将日志记录到控制台,你可能会使用闭包。
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.
我曾经发布过的东西有很多的错误。上面的工作! – selbie
您可以通过扩展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
值。
这只是用于调试或者你有一些更深层次的目的是什么? – hugomg
我想在每个函数调用中注入1ms暂停以允许DOM重绘顺利进行。 – Randomblue
Javascript没有睡眠功能,可以让您轻松做到这一点;不是每个*函数都会“需要”改变(只有重绘的函数),最后,这听起来太疯狂了 - 还有更多的标准方法可以解决这个问题。 – hugomg