【问题标题】:Get anonymous function name获取匿名函数名
【发布时间】:2013-01-06 01:16:35
【问题描述】:

本例中如何从函数中获取变量名:

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

有这样的吗?

【问题讨论】:

  • 好吧,没有办法做到这一点,你能描述一下你想解决什么问题吗?
  • @kirugan,反射。

标签: javascript function variables anonymous-function names


【解决方案1】:

那个函数是匿名的;它没有名字。但是,你可以给它一个名字:

var A = function a() {};

那么它的名字就可以通过Function.name:

var A = function a() {};
A.name
> 'a'

【讨论】:

【解决方案2】:

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

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

var stack = new Error().stack;

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

【讨论】:

  • 不,虽然想法非常好,但它不会起作用,你会得到类似:...at <anonymous>:2:5。我尝试了其他一些 OO 方法,例如将方法注入 object.constructor.prototype,然后从对象本身执行它,或者简单地添加一个将堆栈返回到对象本身的方法,执行该方法的两种方式似乎仍然输出运行无名构造函数的堆栈.. :(
【解决方案3】:

不,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

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

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-22
      • 2021-07-02
      • 2011-12-29
      • 2011-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多