2011-02-17 131 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为任何其他作用域的变量变量应该生活在变变量是真的不应该使用虽然反模式。