检查类是否扩展了另一个类

时间:2015-05-22 18:15:05

标签: actionscript-3 flash

要清楚,我想检查一个类,而不是该类的实例。

public function changeScene(newScene:Class):void 
{
  if(newScene isExtending Scene)
  //...
}

它是Class类型的变量。

编辑:更多详情。 该功能的作用(简化):

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();
}

This question对我不起作用,因为我不会一直创建新实例,我大部分时间都在使用它们。实例存储在字典中,使用类作为键。

2 个答案:

答案 0 :(得分:1)

在没有实例化对象的情况下,这是我能想到的唯一方法:

使用flash.utils.getQualifiedSuperclassName获取类的超类。因为它返回一个字符串,所以你必须使用flash.utils.getDefinitionByName来获得实际的类引用。

因此,您可以编写一个函数来遍历继承,直到它找到匹配项,或者到达Object(所有内容的基础)。

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

答案 1 :(得分:0)

  

另一个问题并不适用于我,因为我不会创造新的问题   在所有情况下,我大部分时间都重复使用它们。实例   使用类作为键存储在字典中。

我不同意。

工厂模式封装了某个类的对象的整个创建。这还包括限制类实例化的频率。 如果你只想让工厂生产一个物体,那就可能了。它将变为Singleton