Я использую библиотеку Prototype.js (из www.prototypejs.org) для создания классов, которые расширяются подклассами. Однако у меня возникают проблемы с использованием массивов в экземплярах этих классов. Я сделал пример, чтобы проиллюстрировать это:
var SuperClass = Class.create({
initialize: function(id) {
this.id = id;
}
});
var SubClass = Class.create(SuperClass, {
items: [],
add: function(arg) {
this.items[this.items.length] = arg;
},
initialize: function($super, id) {
$super(id);
}
});
var a = new SubClass("a");
var b = new SubClass("b");
a.add("blah");
alert(a.id + ": " + a.items.length);
alert(b.id + ": " + b.items.length);
Проблема здесь в том, что и первое, и второе предупреждение будут указывать, что соответствующие объекты имеют 1 элемент в массиве элементов, хотя я добавил элемент только к объекту a. Примитивные типы данных работают корректно (о чем свидетельствует правильное отображение свойства id), но массивы просто не будут работать. Также не имеет значения, если я перенесу массив элементов и метод добавления в суперкласс, я уже пробовал.
Есть ли способ заставить это работать? Это ошибка в Prototype или это особенность JavaScript? :-)