Оператор перегрузки [] в AS3

Я только что закончил писать свой собственный класс коллекции, и мне бы очень хотелось сделать его итеративным с помощью for each или простого for, или просто для доступа к элементам с нотацией collection [key].

Я написал функцию getElementAt(index):MyOwnElement, но ее использование не так привлекательно, как использование квадратных скобок, даже не позволяйте мне начинать повторять ...

Там в любом случае?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
0
5 303
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы не можете переопределить оператор в 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...in and for each..in loops 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] );
}

Другие вопросы по теме