Что мне делать?
Используйте только методы класса для доступа и установки элементов в вашем «массиве», не используйте специфичный для Array синтаксис. И / или сделать класс динамическим.
<Ч />
РЕДАКТИРОВАТЬ Я думаю, что вы можете оставить все как есть и не делать свой класс динамическим , определяя только один дополнительный метод для доступа к элементу (если его по какой-то причине нет). Что-то вроде:
public functon getItem(index:uint):*
{
if (index >= length) {
return null;
}
return this.slice(index, index+1)[0];
// this creates a redundant array on the fly, sorry.
}
// usage:
var people:People = ... init and fill with Person objects
for(var i:int=0; i<people.length(); i++){
doSomething(people.getItem(i));
}
<Ч />
И я знаю, что это не тот способ, которым нужно отвечать на stackoverwlow, но ... я не могу это удержать. ))
Anything extends Array
- это ересь. Если я увижу это в рабочем коде, я немедленно приступлю к инициации последовательности «очистить нечистую».
Просто попробуйте немного погуглить по этому предмету, и вы увидите, что от такой деятельности почти никто не выжил.
Основная рациональная причина, по которой эта мерзость не предназначена для существования (кроме ереси), заключается в том, что вы не можете использовать доступ к массиву []
, вы не можете создать его экземпляр как обычный массив с элементами, и вы не можете установить элементы с помощью синтаксиса массива []
и получать уведомления об изменениях где-то в вашем классе. Но это является массивом по праву рождения, поэтому любой из ваших коллег-разработчиков, не знакомый с предметом, может попытаться использовать его как обычный массив, потому что это вполне естественно. И тогда они, вероятно, опубликуют еще один вопрос по stackoverflow.
Итак, если вы все еще ограничены использованием только методов класса, какой смысл в любом случае расширяться? Почему бы не использовать аккуратные способы агрегации / композиции или прокси?
Удивительно, но даже на сайте есть статья о расширении массива . Они не упоминают, что вы, вероятно, сразу же начнете гореть в аду.