2012-10-19 34 views
1
function myClass(a,b,c) { 
    this.alertMyName=function(){alert(instancename)} 

{...} 


} 

然後的Javascript獲取類的實例的名稱

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

你可以傳遞實例名稱作爲參數或使用'this'。 – Dev

+0

alert(this)返回[object Object] – Adarchy

+0

'console.log(this);' – Dev

回答

2

繼大衛的回答,變量在JavaScript中有一個值,該值可以是一個原始的或引用一個對象。如果值是引用,那麼它引用的內容不知道變量的「名稱」是什麼。

考慮:

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

所以,現在又該foo.alertMyName()回報呢?甚至:

(new MyThing()).alertMyName(); 

如果你想讓實例擁有一個名字,那麼給它們一個屬性並且將它的值設置爲任何適合的值。

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

是否真的是唯一的方法呢? – Adarchy

+0

AFAIK,你不能在JavaScript中獲得任何變量的字符串「表示」,部分原因是它可能是對另一個對象的引用。 – David

+0

還有其他方法,但它們本質上是一樣的。 – RobG

5

我找不到堆棧溢出的解決方案所以這裏是一個解決方案,我從ronaldcs發現dforge.net: 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

我很驚訝這個答案沒有得到太多的關注。 –