12

我正在使用 Chrome v22.0.1229.94 m,这并不重要,但以防万一:-)

便携性与我无关。只要它适用于 Chrome(和 Safari),我就很高兴。

我有两个函数,foo 和 bar:

var foo = function() {
  ...
}
function bar() {
  ...
}

那么如果我使用它们创建对象:

f1 = new foo();
b1 = new bar();

我可以得到 bar 的构造函数名称,但不能得到 foo 的构造函数名称:

> f1.constructor.name  ==> ""
> b1.constructor.name  ==> "bar"

然而在这两种情况下,当我检查变量f1b1时,DevTools 控制台都会显示名称“foo”和“bar” 。

如何像 DevTools 那样提取f1的名称 foo ?

在此处输入图像描述

4

2 回答 2

8

V8 可以在解析阶段执行函数名称推断,通过其 API 公开此信息。您将无法使用普通对象属性提取此信息。

于 2012-10-18T09:09:56.833 回答
2

在 for 的情况下foo,您正在创建一个函数表达式。这意味着,您将一个匿名函数分配给一个变量。

你不能name像那样以编程方式解析函数,除非你给函数一个名字并创建一个“命名函数表达式”。

var foo = function foo() {
  ...
}
于 2012-10-17T23:07:09.980 回答