I have a several variables which are assigned to the same function. The property 'name' is "" as this function is anonymous;
There also isn't a function call involved, and as such no callee.
Is there a way in JS to obtain the variable's name, through a self-implemented reflection algorithm?
e.g.
var x = function(){}
var myUnknownNamedVar1 = myUnknownNamedVar2 = x;
Background:
for space efficiency, thousands of variable names are assigned to the same 'static' function as a lazy-loaded stumps, which get resolved to individual functions upon the first call invocation. (The variable name also contains a namespace).
Alternatives:
My alternative would be the use of objects such as {_name: myUnknownNamedVar1 , _fn: x}
Solutions to this issue would be interesting. A particular issue is discerning variables with different names ,in the script, which point to the same object.
No. There is not.
A simple explanation (that reinforces the point in the post) for this is simply: a variable (or property) is not a value/object. Rather, it is a "name" for a value/object. The same object can be named multiple times.
Imagine this example, and consider how it maps to "names" given to people :-)
Happy coding.
1. You could try parsing the script's text.
JSFiddle Example
2. You can try comparing values
JSFiddle Example
Note: Both methods will need refining (eg recursion, better/more match patterns). The second one only looks at global variables, whereas some variables in closures may not be exposed to the global namespace. Also, there are objects of objects.
It is possible to use object reflection, as such:
You can use decorators to detect the name of variable that must be :
(a)- Class
(b)- Attribute of class or of instance
(c)- Method of class or of instance
The decorator provides 3 informations about the decorated :
Thus:
target.name
the name of (b) or (c) is
key
directlyexample (Try Fiddle) :
Try Fiddle