我希望能够遍历文档中的所有JavaScript函数,例如,向它们添加alert('ok');
。
所以,如果我有:
function a(num) {
return num;
}
运行我的javascript代码并调用此函数后,它实际上会执行:
{
alert('ok');
return num;
}
我知道我可以使用window。[funcName]访问一个函数,但是如何通过所有函数进行迭代并编辑它们?
感谢
PS:我知道这不是一个好主意,但它仅适用于调试环境
答案 0 :(得分:1)
for (var i in window) {
if (typeof window[i] == 'function') console.log(i); // logs the function name
}
这会为您提供一系列功能。您无法在JavaScript中修改函数,只能包装它们。这意味着您复制了该函数并用包装器替换原始函数。说,我们有这个功能:
function a(num) { return num;}
然后我们将它包装成这样:
functionName = 'a'; // original function name
window['_original_' + functionName] = window[functionName]; // putting it in a safe place
window[functionName] = function() { // creating wrapper
alert('ok'); //logger function
return window['_original_' + functionName].apply(null, arguments); //invoke original
}
这只为您提供全局空间功能,例如它不会记录jQuery插件。如果要记录所有函数,请使用Firebug的分析器。
答案 1 :(得分:0)
我尝试使用包装现有函数的拦截器函数,而不是修改现有函数的代码。只是快速实施(我们可以进一步改进)
function intercept(object, methodBindName, interceptor) {
var oldMethod = object[methodBindName];
object[methodBindName] = function() {
interceptor.apply(null, arguments);
return oldMethod.apply(object, arguments);
}
}
function test1(msg) {alert(msg);}
function test2() {alert('hi');}
var methodNames = ['test1', 'test2'];
for(var i = 0; i < methodNames.length; i++) {
intercept(window, methodNames[i], function(){alert('Hello');})
}
test1('foo');
test2();