DevTools如何确定对象的构造函数名称?

Cyb*_*nic 10 javascript constructor google-chrome-devtools

我使用的是Chrome v22.0.1229.94 m,而不是它应该重要,但以防万一:-)

便携性对我来说无关紧要.只要它适用于Chrome(和Safari),我很高兴.

我有两个函数,foo和bar:

var foo = function() {
  ...
}
function bar() {
  ...
}
Run Code Online (Sandbox Code Playgroud)

然后,如果我使用它们创建对象:

f1 = new foo();
b1 = new bar();
Run Code Online (Sandbox Code Playgroud)

我可以获得bar的构造函数名称,但也不是foo:

> f1.constructor.name  ==> ""
> b1.constructor.name  ==> "bar"
Run Code Online (Sandbox Code Playgroud)

但在这两种情况下,当我检查变量f1b1时,DevTools控制台将显示名称"foo"和"bar" .

如何像DevTools一样为f1提取名称 foo

在此输入图像描述

Ale*_*lov 6

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


jAn*_*ndy 2

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

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

var foo = function foo() {
  ...
}
Run Code Online (Sandbox Code Playgroud)