AS3:设计自定义集合类

时间:2010-09-15 15:37:18

标签: actionscript-3

任务:

设计一个类,该类是其他对象的集合,可以在中用于每个(...)

public class Cards
{
    public function add( $Card : Card ) { ... }
}

//...

var $Cards:Cards = new Cards();
//...
for each ( var $Card:Card in $Cards) {
    // do things
}

我的 first attemt 是使用 Array 类作为父级:

public class Cards extends Array { ... }

这很好但 Cards 类继承了很多 Array 的公共方法,这些方法在 Cards 对象中不应该是可见的,例如 sort() push() forEach()

第二次尝试是将基类定义为动态

public dynamic class Cards { ... }

这样可行,但在这种情况下,我应该将每个子类定义为动态:

public dynamic class Cards { ... }
...
var $Cards:Cards = new Cards();
$Cards.add( new Card() ); // works well

public class Player_Cards extends Cards { ... }
...
var $PlayerCards:Cards = new Player_Cards();
$PlayerCards.add( new Card() ); // error, Player_Class should be defined as dynamic too   

有趣的是,如果我使用 Array 类作为父级,我不应该将子类定义为 dynamic

所以,问题是: 是否可以在AS3中设计一个可以在中用于每个(...)的集合类,并且不包含任何不一致的方法(例如来自 Array 类)?

2 个答案:

答案 0 :(得分:1)

您可以扩展Proxy类。

检查此question以获取有关如何执行此操作的一些指示。

答案 1 :(得分:0)

您应该能够继承Object并实施propertyIsEnumerable