我想打印从网页上发送到Web浏览器的函数调用,即javascript的活动函数。但我的方法不正确我猜是因为在下面的代码的帮助下我得到了所有的javascript函数。
function tracecalls(par) {
var f, fname;
for (fname in window) {
f = window[fname];
if (typeof fun === 'function') {
window[fname] = (function(fname, fun) {
var arg = arguments;
return function() {
return par.apply(this, arg);
f.apply(this, arg);
}
})(fname, f);
}
}
}
tracecalls(function(fname, f) {
console.log("Function Name : " + fname);
});
经过一些文章后我才知道,我们可以获得活动函数,即在Ecmascript 6 Proxy的帮助下动态调用的函数的名称。由于我是全新的,所以任何人都可以指导我如何继续使用代理..
答案 0 :(得分:0)
您的方法实际上是正确的,您在实施过程中犯了一些错误。
不要试图在这里使用代理,这要复杂得多 - 而且无论如何都无法将全局对象替换为自己的代理版本。
function tracecalls(par) {
for (var name in window) {
if (typeof window[name] === 'function') {
// ^^^^^^^^^^^^ there is no variable `fun` anywhere
window[name] = (function(fname, f) {
// ^ don't use `fun` here
// you don't need `var arg = arguments;` here
return function() {
par(fname);
// ^ ^^^^^ you don't need apply, just pass the name
// ^ no return here
return f.apply(this, arguments);
// ^^^^^^ yield result ^^^^^^^^^ pass through current arguments, not `arg`
}
}(name, window[name]));
}
}
}
tracecalls(function(fname) {
console.log("Function Name : " + fname);
});