在 JavaScript 中获取对象变量名

新手上路,请多包涵

我正在创建一个 JavaScript 代码,我遇到了一种情况,我想在对象方法中读取对象名称(字符串)。我想要实现的示例代码如下所示:

 // Define my object
var TestObject = function() {
    return {
        getObjectName: function() {
            console.log( /* Get the Object instance name */ );
        }
    };
}

// create instance
var a1 = TestObject();
var a2 = TestObject();

a1.getObjectName(); // Here I want to get the string name "a1";

a2.getObjectName(); // Here I want to get the string name "a2";

我不确定这在 JavaScript 中是否可行。但如果是这样,我很想听听你们如何实现这一目标。

原文由 programmer 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 440
2 个回答

这在 JavaScript 中是不可能的。变量只是对对象的引用,同一个对象可以被多个变量引用。无法判断使用了哪个变量来访问您的对象。但是,如果您将 name 传递给您的构造函数,您可以返回它:

 // Define my object
function TestObject (name) {
    return {
        getObjectName: function() {
            return name
        }
    };
}

// create instance
var a1 = TestObject('a1')
var a2 = TestObject('a2')

console.log(a1.getObjectName()) //=> 'a1'

console.log(a2.getObjectName()) //=> 'a2'

原文由 gyre 发布,翻译遵循 CC BY-SA 3.0 许可协议

可能的,如果:

  1. 您的变量在全局空间中可用
  2. 并重新定义 TestObject 以便它可以被实例化。
 // Define my object
function TestObject(){}
TestObject.prototype.getObjectName = function () {
  for (var x in window) {
    try {
      if (window[x] == this) return x;
    } catch (e) {}
  }
};

var a1 = new TestObject();
var a2 = new TestObject();

console.log(a1.getObjectName());
console.log(a2.getObjectName());

原文由 customcommander 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题