Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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?

enter image description here

like image 519
CyberFonic Avatar asked Oct 17 '12 23:10

CyberFonic


2 Answers

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() {
  ...
}
like image 103
jAndy Avatar answered Oct 05 '22 11:10

jAndy


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.

like image 45
Alexander Pavlov Avatar answered Oct 05 '22 10:10

Alexander Pavlov