How does DevTools determine an object's constructor's name?

夙愿已清 提交于 2019-11-27 03:24:20

问题


I'm using Chrome v22.0.1229.94 m, not that it should matter, but just in case :-)

Portability is of no concern to me. As long as it works with Chrome (and Safari) I'm happy.

I have two functions, foo and bar:

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

then if I create objects using them:

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

I can get the constructor's name for bar, but nor for foo:

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

yet in both cases DevTools console will show the names "foo" and "bar" when I inspect the variables f1 and b1.

How do I extract the name foo for f1 as DevTools is able to?


回答1:


V8 can perform function name inference at the parsing stage, exposing this information via its APIs. You will not be able to extract this info using the normal object properties.




回答2:


In the case for foo, you're creating a function expression. That means, you're assigning an anonymous function to a variable.

You can't resolve the function name programatically like that, unless you give the function a name and create a "named function expression".

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


来源:https://stackoverflow.com/questions/12944719/how-does-devtools-determine-an-objects-constructors-name

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!