问题
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