4

在此示例中,如何从函数中获取变量名称:

// it should return A
var A = function(){ console.log(this.name); } 

有这样的事情吗?

4

4 回答 4

11

该函数是匿名的;它没有名字。但是,您可以为其命名:

var A = function a() {};

然后可以通过以下方式访问其名称Function.name

var A = function a() {};
A.name
> 'a'
于 2013-01-06T01:24:25.540 回答
5

我知道这是一个旧线程,但仍在搜索结果中。所以仅供参考:

一个解决方案可能只是使用堆栈跟踪。

var stack = new Error().stack;

使用修剪和拆分来获得所需的值。

于 2014-09-04T09:14:52.797 回答
2

不,Javascript 中没有类似的东西。该函数是匿名的,因此它没有名称,并且您想要的是模棱两可的,因为该函数可以很容易地拥有任意数量的变量来引用它,例如:

var a, b, c, d;
a = b = function(){ console.log(this.name); };
c = b;
d = c;
a = b = 5;
// a and b no longer refer to the function, but c and d both do

你真正想要完成的是什么?我确信还有另一种方法可以实现它。

于 2013-01-06T01:19:04.440 回答
2

在 Chrome 和 Firefox 的最新版本中可能如下所示。我只推荐这个用于调试目的(例如非生产中的 javascript 跟踪)

var myNameInChrome = /.*Object\.(.*)\s\(/.exec(new Error().stack)[0];
var myNameInFF = new Error().stack.split("@")[0];
于 2015-01-11T02:40:44.373 回答