首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我怎样才能知道哪个函数在javascript中被引用了?

我怎样才能知道哪个函数在javascript中被引用了?
EN

Stack Overflow用户
提问于 2011-03-15 03:53:40
回答 4查看 194关注 0票数 0

我正在开发一些JS,在JS中,函数是通过引用传递的,很难看到哪个函数有时会被调用。它将通过7-8个函数传递,每个函数都有大量的参数,所以追踪它的来源非常耗时。我正在努力改变这一点,但我能够弄清楚哪个函数实际上正在被调用的唯一方法是这样做:

代码语言:javascript
运行
复制
        if (console && console.log && method.toSource) {
            console.log(method.toSource());
        }

这只适用于FF,但至少那时我可以搜索被调用函数的源代码。有没有更好的方法?

EN

回答 4

Stack Overflow用户

发布于 2011-03-15 04:00:22

尝尝这个

代码语言:javascript
运行
复制
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中工作,但也许你会有更好的运气。

票数 1
EN

Stack Overflow用户

发布于 2011-03-15 04:10:57

安装firefox

安装firebug插件

点击右下角的bug图标

单击脚本选项卡

单击启用

重新加载页面

在firebug中单击右侧面板上的堆栈选项卡

票数 1
EN

Stack Overflow用户

发布于 2011-03-15 04:14:13

你有没有尝试过Firebug中的console.trace()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5303697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档