Не совсем (на самом деле он компилируется, но, вероятно, не делает то, что вы намеревались).
Я предполагаю, что вы хотите создать 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++;
};
Только объекты FYI, объекты и массивы, для всех целей и целей, то же самое в JavaScript. – KyleFarris
вы можете использовать для (x = 1; x
Вы * можете * если вы определили свою собственную длину и сохранили ее в актуальном состоянии. Вам также понадобятся правильные «числовые» свойства (все свойства действительно строки, но строки, которые похожи на числа, обрабатываются специально). Не делайте этого, потому что массивы оптимизированы для быстрого доступа и автоматически обновляют «длину», чтобы покрыть все числовые свойства. –