2011-09-06 4 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. 
    }  
} 

주석 처리 된 행은 내가하려고하는 것을 보여줍니다. 다음 이름 variables[j]과 함께 필드를 찾을 인덱스 i에서 objectArr에서 개체를 얻을, 즉

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

그 필드의 값을 설정합니다

답변

9

당신은 이름 속성을 조작하는 브래킷 구문을 사용할 수 있습니다 'something'.

o['propertyName'] = 'value'; 

을 그리고 일반적인 방법으로 액세스합니다 :

alert(o.propertyName); 
+0

그랬습니다. 빠른 답장을 보내 주셔서 감사합니다. –

0

사용 당신은 이름으로 속성을 설정할 수 있습니다

var o = {}; 

: 객체 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'; 
    }  
} 

몇 가지 : 당신은 두 개의 분리 된 루프 변수를 가지고 있어야하므로

  • 자바 스크립트, 블록 범위를 가지고 있지 않습니다.
  • 일반적으로 Obj과 같은 생성자 함수는 new 키워드와 함께 사용해야 함을 나타 내기 위해 대문자로 시작해야합니다. 그러나이 경우 객체가 아닌 객체 프로토 타입을 필요로하지 않는다면 평범한 객체 리터럴 (objectsArr[ii] = {};)을 사용할 수 있습니다.
관련 문제