【问题标题】:How to get the name of the variable containing the object in JavaScript如何在 JavaScript 中获取包含对象的变量的名称
【发布时间】:2015-11-03 11:14:51
【问题描述】:

我可以通过下面的代码获取类的类名:

function MyClass() {
	return 42;   
}

var obj = new MyClass();

console.log(obj.constructor.name);

但是如何获取变量名呢?

【问题讨论】:

  • 我可能弄错了,但我认为你不能(除非你添加一个 name 属性)
  • 这听起来像是一个 XY 问题,为什么需要变量的名称?
  • @Jamiec 避免创建名称属性。

标签: javascript oop variables


【解决方案1】:

你不能。

考虑:

function MyClass() {
    return 42;   
}

var obj = new MyClass();
var ob2 = obj;
var ob3 = obj;

现在有三个变量都具有相同的值。如果可能,你会买哪一个?

在 JavaScript 中变量和它的值之间没有反向关系。

【讨论】:

  • 在您的代码中,ob2 和 ob3 是同一个对象的引用:obj。但是如果我用“new”关键字激活 3 次,我得到了 3 个不同的对象,对吗?
  • 因为你的观点与我的问题无关,但是我承认我没有说足够的细节。我得到了 4 个对象,MyObject 的实例,我想获取这些对象的名称,但我想我会使用数组或具有名称属性的对象。谢谢。
  • @rickozoe — 我的意思是你不能按照你的问题要求去做。这完全是关于你的问题!
【解决方案2】:

这个问题在很大程度上打败了自己。这种情况的用例通常是当您扫描对象以查找某些键/值对时。即使您想通过所有全局/窗口变量进行培养,您仍然可以这样做:

for(var obj_name in window) { 
  if(window.hasOwnProperty && !window.hasOwnProperty(obj_name)) continue;
  console.log(obj_name);
  if(window[obj_name]) console.log(window[obj_name]);
}

【讨论】:

    【解决方案3】:

    试试这个

    function MyClass() {
       return 42;   
    }
    
    var obj = new MyClass();
    var name = /function (.{1,})\(/;
    var results = (name).exec(obj.constructor);
    if(results)
    {
        console.log(results[1])
    }
    

    【讨论】:

    • 我得到了“我的班级”。怎么回事,我问了一个问题,但人们对我投了反对票,因为这是不可能的,或者他们无法回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多