AS3中的Overload []运算符

时间:2009-01-15 12:00:35

标签: actionscript-3 collections operator-overloading

我刚刚完成了自己的collecion类的编写,我真的想使用for each或simple for构造进行迭代,或者只是使用collection [key]符号来访问元素。

我写了一个getElementAt(index):MyOwnElement函数,但使用它,并不像使用方形brachets那样性感,甚至不让我开始迭代...

有什么办法吗?

4 个答案:

答案 0 :(得分:9)

你应该看看mx.utils.Proxy - 从中​​继承你的集合类(并将其设置为动态)可能会让你访问你想要的一些功能(或者至少是足够接近的东西。)

例如,以下是nextValue()方法文档的摘录:

  

“允许枚举代理   对象的索引号属性为   检索属性值。但是,你   无法枚举的属性   代理类本身。 此功能   支持在对象上实现for...infor each..in循环   检索所需的值。“

答案 1 :(得分:1)

在AS3 here

中实现迭代器模式有一篇非常好的文章

答案 2 :(得分:0)

您不能在AS3中覆盖运算符。
我想你可以把'getElementAt'变成一个简短的名字,比如'at':) 或者将getElementAt绑定到临时变量....

答案 3 :(得分:0)

取决于您的收藏品的内部结构。如果您的集合存储为数组,那么您可以使用特性来实现方括号效果:


/*** 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] );
}

如果您的集合未存储在数组中,您可以将其转换为数组(如java Collection的toArray()方法)。

例如,如果您的集合是链接列表:


/*** 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] );
}