我刚刚完成了自己的collecion类的编写,我真的想使用for each或simple for构造进行迭代,或者只是使用collection [key]符号来访问元素。
我写了一个getElementAt(index):MyOwnElement
函数,但使用它,并不像使用方形brachets那样性感,甚至不让我开始迭代...
有什么办法吗?
答案 0 :(得分:9)
你应该看看mx.utils.Proxy
- 从中继承你的集合类(并将其设置为动态)可能会让你访问你想要的一些功能(或者至少是足够接近的东西。)
例如,以下是nextValue()
方法文档的摘录:
“允许枚举代理 对象的索引号属性为 检索属性值。但是,你 无法枚举的属性 代理类本身。 此功能 支持在对象上实现
for...in
和for 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] );
}