如何判断在javascript中引用哪个函数?
我正在研究一些JS,其中函数是通过引用传递的,而且很难看到有时会调用哪个函数。它将通过7-8个函数传递,每个函数都有大量的参数,因此追踪它的来源非常耗时。我正在改变一点点,但我已经能够弄清楚,看看哪些功能的唯一方法实际上是被称为是做这样的事情:如何判断在javascript中引用哪个函数?
if (console && console.log && method.toSource) {
console.log(method.toSource());
}
在这只作品FF,但至少可以搜索被调用函数的来源。有没有更好的办法?
尝试此
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');
功能扩充需要一个物镜作为第一个参数,并作为第二功能。它循环遍历寻找函数的对象的所有成员。当它找到一个时,它用一个调用传入函数的函数替换它,然后调用原始函数。我偷走了这个* answer几乎所有的代码。
当您将窗口对象传递给窗口对象时,它看起来好像不太好,所以希望您的函数不是在窗口范围内声明的。
也有这answer他们试图覆盖Function.prototype.call函数与他们自己的。我无法在Firefox中使用它,但也许你会有更好的运气。
这只有在他已经有了一些关于它可能是哪个功能的想法时才有效。 – 2011-03-14 20:01:58
这个应用程序有15000行的js ... – Shawn 2011-03-14 20:03:00
它看起来像萤火虫有一个通话记录选项卡。我从来没有使用它,但它可能适合你。 http://getfirebug.com/javascript – 2011-03-14 20:18:59
在右下角
点击脚本选项卡上的错误图标安装Firefox
安装的Firebug插件
点击
单击启用
重新加载页面
点击右侧面板上的堆栈选项卡上的萤火
您是否在Firebug中尝试过console.trace()
?
功能可参照进行比较,所以如果你有一本字典像亚历克斯·布朗的回答是:
var whee = {
test: function(ab) {
console.log(ab);
this.test2('Hello', 'World');
},
test2: function(a, b) {
console.log(a+' '+b);
}
};
那么你可以比较你的每个现在匿名参考:
function whichFunc(func, funcDict) {
for (var funcname in funcDict) {
if (func == funcDict[funcname]) {
return funcname;
}
}
}
很简单。
为什么你必须知道哪个函数被传递?由于参数?对我来说,你应该改变你的设计。一方面灵活,但不得不知道你正在处理的具体事例似乎并不合适。你能详细说明一下上下文吗?还是只是为了调试? – 2011-03-14 19:58:19
对我来说,如果我做了'console.log(myFunction)',然后点击控制台中的输出,它就会直接跳转到Script选项卡中的函数。 – nickf 2011-03-14 19:59:02
@felix下面是一个例子。从项目列表中选择某个项目时出现问题。我需要找到该项目被选中时调用的函数,并查看那里发生了什么。它看起来像onclick()。 Obv我可以找出该方法的设置,但有时需要很长时间,因为它本身可能是一个传递的函数。代码量很大,所以我需要一种快速自动的方式来查找它,而不是手动查看。 – Shawn 2011-03-14 20:06:03