Actionscript 3 检查类是否扩展了另一个类
为了清楚起见,我想检查一个类,而不是该类的实例Actionscript 3 检查类是否扩展了另一个类,actionscript-3,flash,Actionscript 3,Flash,为了清楚起见,我想检查一个类,而不是该类的实例 public function changeScene(newScene:Class):void { if(newScene isExtending Scene) //... } 这是一个Class类型的变量 编辑:更多细节。 函数的作用(简化): 不适用于我,因为我不总是创建新实例,我大部分时间都重用它们。实例存储在字典中,使用类作为键。以下是我能想到的唯一一种不用实例化对象的方法: 您可以使用flash.utils.getQuali
public function changeScene(newScene:Class):void
{
if(newScene isExtending Scene)
//...
}
这是一个Class类型的变量
编辑:更多细节。
函数的作用(简化):
不适用于我,因为我不总是创建新实例,我大部分时间都重用它们。实例存储在字典中,使用类作为键。以下是我能想到的唯一一种不用实例化对象的方法: 您可以使用
flash.utils.getQualifiedSuperclassName
获取类的超类。由于它返回一个字符串,因此必须使用flash.utils.getDefinitionByName
来获取实际的类引用
因此,您可以编写一个函数,它沿着继承向上走,直到找到匹配项,或者到达对象(一切的基础)
另一个问题不适合我,因为我不创建新的
一直以来,我都在重复使用它们。实例
使用类作为键存储在字典中
我不敢苟同
工厂模式封装了特定类对象的整个创建过程。这还包括限制类实例化的频率。
如果你只想让工厂生产一件物品,那是可能的。它将变成一个Singleton
的可能副本:不过,首先实例化并检查实例会更好,并给您提供编译时检查。如果你展示了你在If(newScene isExtending Scene)
之后所做的事情,那么可以给出一个更为定制的解决方案——虽然这回答了你的问题,但这并不一定是制作应用程序的最佳方式。PO只是使用一种复杂而脆弱的方式来复制一个非常简单且易于使用的单例模式。
public function changeScene(newScene:Class):void
{
currentScene.finish(); //Finish the scene that is about to change
//Check if the new scene don't exist prior this point
if (!scenes[newScene]) //Look in dictionary
addScene(newScene); //Create if first time accessing it
scenes[newScene].caller = currentScene["constructor"];
currentScene = scenes[newScene];
currentScene.start();
}
import flash.utils.getQualifiedSuperclassName;
import flash.utils.getQualifiedClassName;
import flash.utils.getDefinitionByName;
function extendsClass(cls:Class, base:Class):Boolean {
while(cls != null && cls != Object){
if(cls == base) return true;
cls = getDefinitionByName(getQualifiedSuperclassName(cls)) as Class; //move on the next super class
}
return false;
}
trace(extendsClass(MovieClip,Sprite)); //true
trace(extendsClass(MovieClip,Stage)); //false