2011-09-06 50 views
4

我有一个动态创建的名为'变量'的字符串列表。我需要使用这些字符串作为JavaScript对象数组的实例变量。为JavaScript对象动态创建实例字段

var objectsArr = []; 
function obj(){}; 

for (var i=0; i<someNumberOfObjects; i++) { 
    ... 
    objectsArr[i] = new Object();   


    for (var j=0; j<variables.length; j++) { 
     objectArr[i].b = 'something'; //<--this works, but... 
     //objectArr[i].variables[j] = 'something'; //<---this is what I want to do. 
    }  
} 

注释行显示我正在尝试做什么。

回答

9

您可以使用括号语法通过名称来操纵特性:

objectArr[i][variables[j]] = 'something'; 

换句话说,从​​获取对象的索引i然后找到名称variables[j]现场,并设置字段的值到'something'

一般而言,给定对象o

o['propertyName'] = 'value'; 

并获得它以通常的方式:

alert(o.propertyName); 
+0

这样做。感谢您的快速回复。 –

0

使用

var o = {}; 

可以按名称设置属性括号符号。这将完成它:

var objectsArr = [], ii, jj; 

function Obj() {} 

for(ii = 0; ii < someNumberOfObjects; ii += 1) { 
    objectsArr[ii] = new Obj();    

    for (jj = 0; jj < variables.length; jj += 1) { 
     objectArr[ii][variables[jj]] = 'something'; 
    }  
} 

一对夫妇的其他注意事项:

  • JavaScript没有块范围,所以你必须有两个独立的循环变量。
  • 按照惯例,像Obj这样的构造函数应该以大写字母开头,以表示它们应该与new关键字一起使用。不过,在这种情况下,除非需要对象具有非对象原型,否则可以使用普通对象文本(objectsArr[ii] = {};)。