我有一段代码,根据它的类型移动数组。如果数组是TypeA对象,它将更改TypeA。如果是TypeB,它将改变TypeB。当前代码的问题是重复块。
private function scrollRight():void
{
if (SELECTED == CONSTANT)
{
if (_avatarDataInstance.isFirstPage())
{
_buttons.enableLeftScroll();
}
setCurrentItems(_avatarDataInstance.getNextPage());
if (_avatarDataInstance.isLastPage())
{
_buttons.disableRightScroll();
}
}
if (SELECTED == DECOR)
{
if (_decorDataInstance.isFirstPage()) {
_buttons.enableLeftScroll();
}
setCurrentItems(_decorDataInstance.getNextPage());
if (_decorDataInstance.isLastPage()) {
_buttons.disableRightScroll();
}
}
}
这将是我的想法代码,其中_selectedInstance是TypeA或TypeB的实例,无论选择哪一个(TypeA和TypeB是类)。
private function scrollRight():void
{
if (_selectedInstance.isFirstPage())
{
_buttons.enableLeftScroll();
}
setCurrentItems(_selectedInstance.getNextPage());
if (_selectedInstance.isLastPage())
{
_buttons.disableRightScroll();
}
无论如何,我可以在动作中实现这一点吗?我试过这个:
_selectedInstance:Class;
if(somethingA)
selectedInstance(somethingA);
else
selectedInstance(somethingB);
每当我需要访问任何属性(用户)时,它停止工作selectedInstance.testSomething();
答案 0 :(得分:1)
你可以创建一个接口或一个抽象类,例如TypeAbstract,TypeA和TypeB将扩展(或实现,取决于你的选择)。
private function scrollRight():void { var instance:TypeAbstract; switch( SELECTED ) { case CONSTANT: instance = _avatarDataInstance as TypeA; break; case DECOR: instance = _decorDataInstance as TypeB; break; } if(instance.isFirstPage() ) _buttons.enableLeftScroll(); setCurrentItems(instance.getNextPage()); if(instance.isLastPage() ) _buttons.disableRightScroll(); }
一般的想法是实现TypeA& amp;的常用方法。 TypeAbstract类中的TypeB。然后你可以在TypeA&中覆盖这些方法。 TypeB使方法适应子类的细节。 有关更多详细信息,请查看George Profenza提供的链接。