2009-07-11 5 views
0

이 가능합니다 같은 것입니다 : 나는 당신이 푸 개체가 원하는 것을 추론하고있어자바 스크립트에서 다른 객체의 배열을 만드시겠습니까?

function FooClass() 
{ 
    var barsArray=new Array(); 
    var index=0; 

    function addBar() 
    { 
    barsArray[index]=new BarClass(index); 
    } 
} 

function BarClass() 
{ 
    var myIndex; 
    function BarClass(index) 
    { 
     myIndex=index; 
    } 
} 
+0

참고로, 객체와 배열은 모든 의도와 목적을 위해 JavaScript에서 동일합니다. – KyleFarris

+0

배열에서 할 수있는 것처럼 (x = 1; x

+0

길이 속성을 정의하고 최신으로 유지 한 경우 * 할 수 있습니다. 또한 올바른 "숫자"속성이 있어야합니다 (모든 속성은 실제로는 문자열이지만 숫자처럼 보이는 문자열은 특별히 처리됩니다). 배열은 빠른 액세스를 위해 최적화되고 모든 숫자 속성을 포함하도록 "길이"를 자동으로 업데이트하므로이 작업을 수행하지 마십시오. –

답변

2

, 그리고 푸 객체는 바 객체의 배열을 포함해야합니다. 각 Bar 객체는 부모 Foo 객체 내의 배열 인덱스를 알아야합니다. 그 정확한 설명 인 경우

,이 시도 :

function BarClass(idx) { 
    this.myIndex = idx; 
} 

function FooClass(howMany) { 
    this.barsArray = []; 

    for (var x = 0; x < howMany; x++) { 
     this.barsArray[x] = new BarClass(x); 
    } 

} 

var foo = new FooClass(5); 
// foo.barsArray[0].myIndex === 0 
// foo.barsArray[1].myIndex === 1 
// foo.barsArray[2].myIndex === 2 
// foo.barsArray[3].myIndex === 3 
// foo.barsArray[4].myIndex === 4 
// foo.constructor === 'FooClass' 
// foo.barsArray[0].constructor === 'BarClass' 

행운을 빕니다!

1

아니요 (실제로는 컴파일되지만 실제로는 의도하지 않은 것일 수 있습니다).

나는 당신이 barsArray 회원의에 BarClass 객체를 추가 addBar 방법으로 FooClass 클래스를 생성 할 있으리라 믿고있어.

addBar 함수는 FooClass 함수/생성자 내의 로컬 변수에 불과합니다. 생성자 외부에서 액세스 할 수있게하려면 this.addBar에 할당해야합니다. index을 늘리는 것 외에도 FooClass으로 변경해야합니다.

클래스 BarClass 클래스의 경우 "클래스"는 실제로는 생성자 함수에 불과하다는 것을 기억하십시오. 별도의 생성자가 필요하지는 않습니다. BarClass은 색인을 가져와 this.myIndex에 할당하는 단일 함수 일뿐입니다.

function FooClass() 
{ 
    // use this.barsArray = [], etc if you want them to be publically available 
    var barsArray=[]; // It's usually better to use "[]" instead of "new Array()" 
    var index=0; 

    this.addBar = function() { 
    barsArray[index]=new BarClass(index); 
    index++; 
    } 
} 

function BarClass(index) 
{ 
    this.myIndex=index; 
} 

는 속성 대신 지역 변수 ("this.barsArray = []"및 "this.index = 0」)로 barsArrayindex을 변경하면 FooClass.prototypeaddBar 넣어 거기에만 의지 할 함수의 인스턴스 일 수 있습니다.

function FooClass() 
{ 
    this.barsArray=[]; 
    this.index=0; 
} 

FooClass.prototype.addBar = function() { 
    this.barsArray[this.index]=new BarClass(this.index); 
    this.index++; 
}; 
관련 문제