Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 检查类是否扩展了另一个类_Actionscript 3_Flash - Fatal编程技术网

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