2009-07-11 4 views
0

ли что-то подобное можно:Создание массива других объектов в javascript?

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

Только объекты FYI, объекты и массивы, для всех целей и целей, то же самое в JavaScript. – KyleFarris

+0

вы можете использовать для (x = 1; x

+0

Вы * можете * если вы определили свою собственную длину и сохранили ее в актуальном состоянии. Вам также понадобятся правильные «числовые» свойства (все свойства действительно строки, но строки, которые похожи на числа, обрабатываются специально). Не делайте этого, потому что массивы оптимизированы для быстрого доступа и автоматически обновляют «длину», чтобы покрыть все числовые свойства. –

ответ

2

Я выводя, что вы хотите иметь объект Foo, и этот объект Foo должен содержать массив объектов Bar. Каждый объект 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

Не совсем (на самом деле он компилируется, но, вероятно, не делает то, что вы намеревались).

Я предполагаю, что вы хотите создать FooClass класс с addBar метод, который добавляет к BarClass объект это barsArray член.

Функция 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; 
} 

Если вы измените barsArray и index быть свойства вместо локальных переменных ("this.barsArray = [];" и "this.index = 0"), вы можете положить addBar в FooClass.prototype и только там будет является одним из примеров функции:

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

FooClass.prototype.addBar = function() { 
    this.barsArray[this.index]=new BarClass(this.index); 
    this.index++; 
}; 
Смежные вопросы