要清楚,我想检查一个类,而不是该类的实例。
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对我不起作用,因为我不会一直创建新实例,我大部分时间都在使用它们。实例存储在字典中,使用类作为键。
答案 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
。