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添加前缀,以区别于该类的另一个实例创建的同一对象。
答案 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();
如果您希望实例具有名称,请为其提供属性并将其值设置为适合的任何名称。