Javascript 匿名函数中的函数调用方名称
我猜在匿名函数中没有办法获得函数调用方的名称,是吗Javascript 匿名函数中的函数调用方名称,javascript,anonymous-function,Javascript,Anonymous Function,我猜在匿名函数中没有办法获得函数调用方的名称,是吗 (function() { var cls = function() { this.foo = function() { console.log(arguments.callee.caller); // null foo1(); } var foo1 = function() {
(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();
正确-他们是匿名的。如果你需要通过被叫人知道他们的名字,你需要给他们一个名字。类似于
this.foo=function foo()
而不是this.foo=function()
这样的东西对你有用吗?在Chrome和Firefox的最新版本中可能会出现如下情况。我只建议用于调试目的(例如非生产环境中的javascript跟踪)
我打算在jQuery中找出一个函数堆栈跟踪。您建议的命名函数表达式在IE中存在严重问题。请参阅kangax的文章:在无法重命名匿名函数的情况下,如何做到这一点?我认为在myNameInChrome的情况下,应该使用索引1来获取函数名。索引0提供完全匹配的正则表达式行。这将提供函数所属命名空间的名称,而不是调用方的名称。回答得不错。Rutwick我更新了代码示例。您是否在如图所示的匿名函数中尝试过它?我的chrome浏览器为其错误()输出此命令。堆栈(JSONified):
“错误\n在神秘(:4:27)\n在:1:1”
这在chrome中工作得更好:
var mystery = function() {
var myNameInChrome = /.*Object\.(.*)\s\(/.exec(new Error().stack)[1];
var myNameInFF = new Error().stack.split("@")[0];
}