我有几个变量被赋给同一个函数。属性'name'是"",因为这个函数是匿名的;
也没有涉及函数调用,因此没有被调用方。
在JS中有没有一种方法可以通过自实现的反射算法来获取变量的名称?
- 例如**
var x = function(){}
var myUnknownNamedVar1 = myUnknownNamedVar2 = x;
- 背景**:
为了节省空间,数千个变量名被分配给同一个"静态"函数,作为一个惰性加载的stumps,在第一次调用时,这些stumps被解析为单个函数。(变量名还包含一个命名空间)。
- 备选方案**:
我的替代方法是使用{_name: myUnknownNamedVar1 , _fn: x}
之类的对象
这个问题的解决方案会很有趣。一个特殊的问题是辨别脚本中指向同一对象的不同名称的变量。
5条答案
按热度按时间cclgggtu1#
可以使用对象反射,如下所示:
new9mtju2#
不,没有。
一个简单的解释(强调了帖子中的观点)很简单:一个变量(或属性)不是一个值/对象。2相反,它是一个值/对象的"名字"。3同一个对象可以被多次命名。
想象一下这个例子,并考虑它如何Map到给人的"名字":-)
编程愉快。
a6b3iqyw3#
1.您可以尝试解析脚本文本。
JSFiddle Example
2.您可以尝试比较值
JSFiddle Example
***注意:*这两个方法都需要改进(例如递归,更好/更多的匹配模式)。第二个方法只查看全局变量,而闭包中的一些变量可能不会暴露给全局名称空间。还有对象的对象。
cfh9epnr4#
您可以使用装饰器来检测变量的名称,该变量必须是:
(a)-类别
(b)-类或示例的属性
(c)-类或示例的方法
装饰者提供关于装饰的3个信息:
1.靶
1.钥匙
1.描述符
因此:
target.name
key
示例(Try Fiddle):
Try Fiddle
ddhy6vgd5#
您可以使用的一个技巧如下所示: