2011-02-17 169 views
2

我已經搜索過這個網站,也google了,但似乎無法找到答案。實例名稱作爲變量

我需要動態地創建對象的實例,其中的實例名稱作爲可變設置,所以,而不是訪問對象的屬性使用:

var n = 'abcd'; 

eval('var '+n+' = new myinst();'); 

abcd.property = value; 

我需要使用可變訪問:

['abcd'].property = value; 

但這似乎並不奏效 - 我錯過了什麼?

回答

2

您不應該以這種方式使用eval。您可以輕鬆地分配「動態」變量一些基本的對象,而不是:

var baseObj = {}; 
var n = 'abcd'; 

baseObj[n] = new myinst(); 
baseObj[n].property = value; 

這使您可以完全控制的變量,包括能夠delete它,

delete baseObj[n]; 

或檢查它是否存在,

n in baseObj; 
+0

非常感謝,這很容易,當你知道如何:-) – crankshaft

0

如果它是一個全球性的,你可以使用:

var n = 'abcd'; 
window[ n ] = new myInst(); 
window[ n ].property = value; 
2

你可以做「變量變量」使用數組表示法,但你需要爲它提供了一個背景。在全球範圍內,這將是window

var foo = 'bar'; 
window[foo] = new myinst(); 
window[foo].property = 'baz'; 
alert(bar.property); 

替代window爲任何其他作用域的變量變量應該生活在變變量是真的不應該使用雖然反模式。