匿名函数中的函数调用者名称

发布于 2024-10-08 23:07:37 字数 737 浏览 2 评论 0原文

我猜想没有办法在匿名函数中获取函数调用者名称,是吗?

(function()
{
    var cls = function()
    {
        this.foo = function()
        {
            console.log(arguments.callee.caller); // null
            foo1();
        }

        var foo1 = function()
        {
            console.log(arguments.callee.caller); // foo
            foo2();
        }

        var foo2 = function()
        {
            console.log(arguments.callee.caller); // foo1
            cls.foo(); // local
        }

        var cls =
        {
            foo : function()
            {
                console.log(arguments.callee.caller); // cls.foo2
            }
        }
    }
    return (window.cls = cls);
})();

var c1 = new cls();
c1.foo();

Im guessing there is no way to get the function caller name in an anonymous function, is there ?

(function()
{
    var cls = function()
    {
        this.foo = function()
        {
            console.log(arguments.callee.caller); // null
            foo1();
        }

        var foo1 = function()
        {
            console.log(arguments.callee.caller); // foo
            foo2();
        }

        var foo2 = function()
        {
            console.log(arguments.callee.caller); // foo1
            cls.foo(); // local
        }

        var cls =
        {
            foo : function()
            {
                console.log(arguments.callee.caller); // cls.foo2
            }
        }
    }
    return (window.cls = cls);
})();

var c1 = new cls();
c1.foo();

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

感受沵的脚步 2024-10-15 23:07:37

正确 - 他们是匿名的。如果您需要知道被调用者的姓名,则需要为他们提供一个名称。像 this.foo = function foo() 而不是 this.foo = function() 这样的东西对你有用吗?

Correct - they're anonymous. If you need to know their names by callee, you'll need to give them a name. Will something like this.foo = function foo() rather than this.foo = function() work for you?

你的心境我的脸 2024-10-15 23:07:37

在最新版本的 Chrome 和 Firefox 中可以实现如下功能。我仅建议将此用于调试目的(例如非生产中的 JavaScript 跟踪)

var mystery = function() {
   var myNameInChrome = /.*Object\.(.*)\s\(/.exec(new Error().stack)[1];
   var myNameInFF = new Error().stack.split("@")[0];
}

It is possible in recent versions of Chrome and Firefox as follows. I only recommend this for debugging purposes (e.g. javascript tracing in non-production)

var mystery = function() {
   var myNameInChrome = /.*Object\.(.*)\s\(/.exec(new Error().stack)[1];
   var myNameInFF = new Error().stack.split("@")[0];
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文