2015-07-11 70 views
1

这里面是我的代码:获取的函数名对象

var structure = { 
A: function() { 
    this.B(); 
}, 

B: function() { 
     console.log(arguments.callee.caller.toString()); 
} 

};

然后我运行:

structure.A(); 

正如你明白,我试图让调用函数的名称,但结果是空字符串。有任何想法如何做到这一点?

+3

那么,这两个函数都没有名称。属性名称在技术上不是函数的名称。相关:http://stackoverflow.com/q/17557957/218196。但问题是:为什么要这样做?你想解决什么问题? –

+0

我猜测OP确实希望'arguments.callee.caller.toString()'在他调用'structure.B()'时返回'A'。那是正确的,@snith? –

+0

是的,你是对的。 –

回答

0

我已经添加了函数名称A,并稍微更改了获取要打印的字符串的语句。这是否做你想要的?

var structure = { 
    A: function A() { 
     this.B(); 
    }, 
    B: function() { 
     console.log(arguments.callee.caller.name); 
    } 
} 

structure.A(); 
+0

我可以在没有重命名的情况下得到相同的结果吗? –

+0

我不这么认为。可能有任何数量的变量被分配给你的匿名函数,如果你想得到它,函数需要有自己的名字。你为什么要这样做?也许你可以考虑一种不同的方法,完全避免这种情况? – Iain