您知道ActionScript是否支持联合类型?例如,类似的东西:
function foo(x:ClassA Union classB) {
//x is classA or classB
//do something
}
提前致谢
答案 0 :(得分: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)
现在你必须为你的类中 IBox 中声明的函数编写代码。
那捕获的是什么?好吧,首先
a = new YourClass(parameters etc);
if(a is YourClass)trace('YIPPE');
if(a is IBox)trace('YAY');
你现在有一丝YIPPE YAY。
对于实现IBox的所有类的所有实例,(xxx是IBox)都是如此。
您可以将任何不相关的对象与实现IBox的类传递给期望IBox的函数。
有关详细信息,请参阅Adobe as3 interface document。
我希望这会有所帮助。
答案 1 :(得分:0)
最接近你可以通过拥有一个基类A
并从中B
和C
派生两个类。然后,您可以将B
或C
个实例传递给函数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);
虽然我不建议检查类的类型并根据它来执行代码,但使用接口可能会帮助你,但我们需要知道你要做什么。