4

How to get the the variable name from within a function in this example:

// it should return A var A = function(){ console.log(this.name); } 

Is there something like this?

2
  • 1
    well there is no way to do this, can you describe what problem do you want to solve ? Commented Jan 6, 2013 at 1:19
  • @kirugan, Reflection. Commented Feb 22, 2017 at 13:33

4 Answers 4

11

That function is anonymous; it has no name. You could, however, give it a name:

var A = function a() {};

Then its name is accessible via Function.name:

var A = function a() {}; A.name > 'a' 
Sign up to request clarification or add additional context in comments.

1 Comment

@Adam: Yes, and no. It's supported by all browsers, but there are some implementation bugs, for example: stackoverflow.com/questions/8548840/…
5

I know this is an old thread, but still in search results. so just for reference:

a solution could simply be using the stacktrace.

var stack = new Error().stack; 

use trim and split to get to the desired values.

1 Comment

no, although very nice idea, it won't work, you'll get something like:...at <anonymous>:2:5. I've tried some other OO ways like injecting a method to the object.constructor.prototype, then executing it from the object itself, or simple adding a method that will return the stack to the object itself, both ways executing the method seems to still output the stack running a nameless constructor.. :(
2

No, there is nothing like that in Javascript. That function is anonymous, so it has no name, and what you want is ambiguous because the function could just as easily have any number of variables referencing it like:

var a, b, c, d; a = b = function(){ console.log(this.name); }; c = b; d = c; a = b = 5; // a and b no longer refer to the function, but c and d both do 

What is it you are actually trying to accomplish? I'm sure there is another way to achieve it.

Comments

2

It is possible in recent versions of Chrome and Firefox as follows. I only recommend this for debugging purposes (e.g. javascript tracing in non-production)

var myNameInChrome = /.*Object\.(.*)\s\(/.exec(new Error().stack)[0]; var myNameInFF = new Error().stack.split("@")[0]; 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.