【问题标题】:Javascript get name of instance of classJavascript获取类实例的名称
【发布时间】:2012-10-19 10:23:45
【问题描述】:
function myClass(a,b,c) {
     this.alertMyName=function(){alert(instancename)}

{...}


}

然后

foo = myClass(a,b,c);
boo = myClass(a,b,c);

foo.alertMyName(); //it should alert 'foo'
boo.alertMyName(); //it should alert 'boo'

实际上,对于创建大量 html 对象的类,我需要它来为其 ID 加上前缀,以将它们与此类的另一个实例创建的同一对象区分开来。

【问题讨论】:

  • 您可以将实例名称作为参数传递或使用this
  • alert(this) 返回 [object Object]

标签: javascript class


【解决方案1】:

我在 Stack Overflow 上找不到解决方案,所以这是我从 dforge.net 上的ronaldcs 找到的解决方案: http://www.dforge.net/2013/01/27/how-to-get-the-name-of-an-instance-of-a-class-in-javascript/

myObject = function () {
  this.getName = function () {
    // search through the global object for a name that resolves to this object
    for (var name in window)
      if (window[name] == this)
        return name;
  };
};

试试看:

var o = new myObject(); 
alert(o.getName()); // alerts "o"

【讨论】:

  • 我很惊讶这个答案没有受到太多关注。
  • 这就像班上的冠军。注意:返回的值将是实例化对象时分配的第一个变量名称 - 例如,var a=new foo();变量 b=a;变量 c=b; console.log(c.getName()); //显示“a”
【解决方案2】:

您可以将其作为参数引入:

function myClass(name, a, b, c) {
   this.alertMyName = function(){ alert(name) }
}

foo = new myClass('foo', a, b, c);

或者事后分配:

function myClass(a, b, c) {
   this.setName = function(name) {
       this.name = name;
   }
   this.alertMyName = function(){ 
       alert(this.name)
   }
}

foo = new myClass( a,b,c);
foo.setName('foo');

【讨论】:

  • 这真的是唯一的方法吗?
  • AFAIK,您无法在 javascript 中获得任何变量的字符串“表示”,部分原因是它可能是对另一个对象的引用。
  • 还有其他的方法,但本质上是一样的。
【解决方案3】:

在大卫的回答中,javascript 中的变量具有一个原始值或对对象的引用。如果值是引用,那么它引用的东西不知道变量的“名称”是什么。

考虑:

var foo = new MyThing();
var bar = foo;

那么现在foo.alertMyName() 应该返回什么?甚至:

(new MyThing()).alertMyName();

如果您希望实例具有名称,则给它们一个属性并将其值设置为任何适合的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-18
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    相关资源
    最近更新 更多