我搜索了这个网站并搜索过,但似乎无法找到答案。
我需要动态创建对象实例,其中实例名称作为变量提供,因此不是使用以下方式访问对象属性:
var n = 'abcd';
eval('var '+n+' = new myinst();');
abcd.property = value;
我需要使用变量访问:
['abcd'].property = value;
但这似乎不起作用 - 我错过了什么?
答案 0 :(得分:2)
您可以使用数组表示法执行“变量变量”,但您需要为其提供上下文。在全球范围内,那将是window
:
var foo = 'bar';
window[foo] = new myinst();
window[foo].property = 'baz';
alert(bar.property);
将window
替换为变量变量应该存在的任何其他范围。变量变量实际上是一种不应该使用的反模式。
答案 1 :(得分:2)
您不应该以这种方式使用eval
。您可以轻松地将“动态”变量分配给某个基础对象:
var baseObj = {};
var n = 'abcd';
baseObj[n] = new myinst();
baseObj[n].property = value;
这使您可以完全控制变量,包括delete
它的能力,
delete baseObj[n];
或检查它是否存在,
n in baseObj;
答案 2 :(得分:0)
如果它是全球性的,您可以使用:
var n = 'abcd';
window[ n ] = new myInst();
window[ n ].property = value;