2012-10-17 53 views
10

我使用Chrome v22.0.1229.94男,而不是它应该的问题,但以防万一:-)DevTools如何确定对象的构造函数名称?

便携性是不关心我的。只要它适用于Chrome(和Safari),我很高兴。

我有两个功能,foo和bar:

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

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

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

我能为酒吧得到构造函数的名称,但也没有foo的:

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

在这两种情况下DevTools控制台将显示名称“foo”和“b”当我检查变量f1b1

如何提取F1作为DevTools能够?

enter image description here

+0

这很有趣。这就像devtools任意命名匿名函数一样。看看这个:var foo = function myfoo(){}; new foo(); ==> myfoo' – Mohsen

+0

@Mohsen感谢您的屏幕抓取和您的支持评论。 – CyberFonic

+0

这是一个很棒的问题,我不能相信这是不可能从函数中得到这个名字我自己...我需要它:D任何运气找到解决方案? – Wilt

回答

1

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

以编程方式解决功能name,除非您给函数一个名称并创建一个名为“”的命名函数表达式

var foo = function foo() { 
    ... 
} 
+1

他的问题是开发人员工具如何显示一个名为'foo'的对象作为'new foo()'的返回? – Mohsen

6

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

+1

我并不反对使用V8 API(不需要可移植性)。你能指出我的API文档的方向吗? – CyberFonic

+1

真的不可能得到这个名字吗?难以置信的... – Wilt

相关问题