我正在开发一些JS,在JS中,函数是通过引用传递的,很难看到哪个函数有时会被调用。它将通过7-8个函数传递,每个函数都有大量的参数,所以追踪它的来源非常耗时。我正在努力改变这一点,但我能够弄清楚哪个函数实际上正在被调用的唯一方法是这样做:
if (console && console.log && method.toSource) {
console.log(method.toSource());
}
这只适用于FF,但至少那时我可以搜索被调用函数的源代码。有没有更好的方法?
发布于 2011-03-15 04:00:22
尝尝这个
var whee = {
test: function(ab) {
console.log(ab);
this.test2('Hello', 'World');
},
test2: function(a, b) {
console.log(a+' '+b);
}
};
function augment(obj, withFn) {
var name, fn;
for (name in obj) {
fn = obj[name];
if (typeof fn === 'function') {
obj[name] = (function(name, fn) {
var args = arguments;
return function() {
withFn.apply(this, args);
fn.apply(this, arguments);
}
})(name, fn);
}
}
}
augment(whee, function(name, fn) {
console.log("calling " + name);
});
whee.test('hi');
函数augment将obj作为第一个参数,将函数作为第二个参数。它遍历对象的所有成员以查找函数。当它找到一个函数时,它会用一个函数替换它,该函数先调用传入的函数,然后调用原始函数。我从这个stackoverflow answer中窃取了几乎所有的代码。
当你将窗口对象传递给它时,它似乎不能很好地发挥作用,所以希望你的函数不是都在窗口范围内声明的。
在这个answer中,他们试图用自己的函数覆盖Function.prototype.call函数。我无法让它在Firefox中工作,但也许你会有更好的运气。
发布于 2011-03-15 04:10:57
安装firefox
安装firebug插件
点击右下角的bug图标
单击脚本选项卡
单击启用
重新加载页面
在firebug中单击右侧面板上的堆栈选项卡
发布于 2011-03-15 04:14:13
你有没有尝试过Firebug中的console.trace()
?
https://stackoverflow.com/questions/5303697
复制相似问题