Я только что закончил писать свой собственный класс коллекции, и мне бы очень хотелось сделать его итеративным с помощью for each или простого for, или просто для доступа к элементам с нотацией collection [key].
Я написал функцию getElementAt(index):MyOwnElement, но ее использование не так привлекательно, как использование квадратных скобок, даже не позволяйте мне начинать повторять ...
Там в любом случае?





Вы не можете переопределить оператор в AS3.
Я думаю, вы можете изменить getElementAt на короткое имя, подобное «at» :)
или используйте getElementAt для временной переменной ....
Вам следует взглянуть на mx.utils.Proxy - создание подкласса вашего класса коллекции от этого (и установка его как динамического) может дать вам доступ к некоторым функциям, которые вы хотите (или, по крайней мере, к чему-то достаточно близкому).
Например, вот отрывок из документации метода nextValue():
"Allows enumeration of the proxied object's properties by index number to retrieve property values. However, you cannot enumerate the properties of the Proxy class themselves. This function supports implementing
for...inandfor each..inloops on the object to retrieve the desired values."
Зависит от внутренней структуры вашей коллекции. Если ваша коллекция хранится как массив, вы можете использовать свойства для достижения эффекта квадратных скобок:
/*** MyCollection class ***/
private var elementHolder : Array;
public function get getElementAt() : Array{
return elementHolder;
}
/*** Some other class******/
public function main() : void{
trace("Element at 3: " + myCollection.getElementAt[3] );
}
Если ваша коллекция не хранится в массиве, возможно, вы можете преобразовать ее в массив (например, метод toArray () java Collection).
например, если ваша коллекция представляет собой связанный список:
/*** MyCollection class ***/
public function get getElementAt() : Array{
var temp : Array = new Array();
while( node.next != null{
temp.push( node );
}
return temp;
}
/*** Some other class******/
public function main() : void{
trace("Element at 3: " + myCollection.getElementAt[3] );
}