Javascript获取类实例的名称

时间:2012-10-19 10:23:45

标签: javascript class

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添加前缀,以区别于该类的另一个实例创建的同一对象。

3 个答案:

答案 0 :(得分:5)

我无法在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"

答案 1 :(得分:3)

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

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');

答案 2 :(得分:2)

除了David的回答之外,javascript中的变量具有一个值,它可以是一个原语,也可以是一个对象的引用。如果值是引用,那么它引用的东西不知道变量的“名称”是什么。

考虑:

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

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

(new MyThing()).alertMyName();

如果您希望实例具有名称,请为其提供属性并将其值设置为适合的任何名称。