1

你知道 ActionScript 是否支持联合类型吗?例如,类似的东西:

function foo(x:ClassA Union classB) {
  //x is classA or classB 
  //do something
}  

提前致谢

4

2 回答 2

1

Actionscript 3 不支持 c++ 风格的 mixin 类层次结构。

As3 而是使用在许多面向对象语言中使用的接口方法。

接口通常是功能的抽象模板,允许在与类层次结构无关的对象之间进行通信。

如:

public interface IBox{ 
   function addContentToBox(contentName:String, content:*) Boolean;
   function boxHasContent(contentName:String): Boolean;
   function getContentFromBox(contentName:String): *;  
} 

当你在 as3 中定义一个类时,如果你想让它实现你写的 IBox 接口

class YourClass extends anotherClass implements IBox {

(仅在扩展另一个类时才需要扩展 anotherClass)

现在您必须为YourClass中IBox中声明的函数编写代码。

那么问题是什么?嗯,首先

a = new YourClass(parameters etc);
if(a is YourClass)trace('YIPPE');
if(a is IBox)trace('YAY');

你现在有了 YIPPE YAY 的踪迹。

(xxx is IBox) 对所有实现 IBox 的类的所有实例都为真。

您可以将任何具有实现 IBox 的类的不相关对象传递给期望 IBox 的函数。

有关详细信息,请参阅Adob​​e as3 接口文档

我希望这有帮助。

于 2013-03-21T08:10:59.243 回答
0

最接近的方法是拥有一个基类A并从中派生两个类BC. 然后您可以将其中一个BC实例传递给函数foo

class classA {}

class classB extends classA {}

class classC extends classA {}

function foo(x:ClassA)
{
    if(x is classB)
        trace("x is classB");
    else if (x is classC)
        trace("x is classC");
}

var c:ClassC = new ClassC();

foo(c);

尽管我不建议检查类的类型并基于此执行代码,但使用接口可能会帮助您,但我们需要知道您要做什么。

于 2013-03-21T03:23:48.033 回答