一、先说一下AS3中的反射 public function getDefinitionByName(name:String):Object 返回 name 参数指定的类的类对象引用。 ? 以下示例使用 GetDefinitionByNameExample 类在舞台上创建一个橙色的正方形。这是使用以下步骤完成的:? 声明代表橙色背景颜色和 80 像素大小的变量,这些变量稍后将用于绘制正方形。 在构造函数内,将 Class 类型的变量 ClassReference 赋予 Sprite。 对名为 instance 的 ClassReference 的实例进行实例化。 由于 instance 按引用是 Sprite 对象,因此可以使用可用于 Sprite 的方法绘制正方形并将其添加到显示列表。 ? package { ?? ?import flash.display.DisplayObject; ?? ?import flash.display.Sprite; ?? ?import flash.utils.getDefinitionByName; ? ?? ?public class GetDefinitionByNameExample extends Sprite { ?? ? ? ?private var bgColor:uint = 0xFFCC00; ?? ? ? ?private var size:uint = 80; ? ?? ? ? ?public function GetDefinitionByNameExample() { ?? ? ? ? ? ?var ClassReference:Class = getDefinitionByName("flash.display.Sprite") as Class; ?? ? ? ? ? ?var instance:Object = new ClassReference(); ?? ? ? ? ? ?instance.graphics.beginFill(bgColor); ?? ? ? ? ? ?instance.graphics.drawRect(0, 0, size, size); ?? ? ? ? ? ?instance.graphics.endFill(); ?? ? ? ? ? ?addChild(DisplayObject(instance)); ?? ? ? ?} ?? ?} } ? 注意,当我们使用自定义的类TestClass时,可能会报ReferenceError:Error #1065:变量TestClass未定义。 这是因为运行中反射,在SWF中取不到TestClass类编译的文件。即使import了也不行,因为import的类只要没有用到,还是会被编译器当作垃圾自动忽略掉。 解决办法也很简单,在工程别的地方用一下TestClass,或者在本类中声明一个未实例化的变量比如var tc:TestClass,或者直接TestClass不声明变量亦可。 ? 二、看一下mx.core.Singleton的源码: private static var classMap:Object = {}; ? public static function registerClass(interfaceName:String,clazz:Class):void{ var c:Class = classMap[interfaceName]; if(!c) ? classMap[interfaceName] = clazz; } ? public static function getClass(interfaceName:String):Class{ return classMap[interfaceName]; } ? public static function getInstance(interfaceName:String):Class{ var c:Class = classMap[interfaceName]; if(!c) { ? throw new Error("No class registered for interface '" + interfaceName + "'."); } return c["getInstance"](); } 代码很简洁,比如在类FlexModuleFactory中注册: Singleton.registerClass("mx.managers::IHistoryManager", Class(getDefinitionByName("mx.managers::HistoryManagerImpl"))); ? 比如在DataGridColumn中取出: _embeddedFontRegistry = IembeddedFontRegistry( Singleton.getInstance("mx.core::IembeddedFontRegistry")); ? 需要注意的是这句:return c["getInstance"](); 它等于上面例子中的写法: ?? ?var ClassReference:Class = getDefinitionByName("interfaceName") as Class; ?? ?var instance:Object = new ClassReference(); ?? ?return instance.getInstance(); ? 三、参考链接:How to use mx.core.Singleton(http://www.duzengqiang.com/blog/post/607.html)
详细解决方案
AS3单例、反照---mx.core.Singleton
热度:620 发布时间:2012-08-30 09:55:54.0
相关解决方案
- Core 标签库解决方法
- org.apache.catalina.core.ApplicationDispatcher invoke Servlet.service() for se解决思路
- java.lang.IllegalArgumentException: dom4j-core,jdom,xml-apis,xerces,junit-Extens,该怎么解决
- core java 这本书好不好解决方案
- core java 这此书好不好
- 想学设计模式(singleton、工厂模式等这种。),有什么书推荐(JAVA描述的)?解决方法
- class Core<T> where T : class, new() 求解~ 多谢
- intel pentium G630 跟 intel core E7500 哪个好点
- intel pentium G630 和 intel core E7500 哪个好点解决方法
- core E4300 配什么华硕主板解决方法
- Tiny Core Linux 3.3 公布,10兆Linux
- Tiny Core Linux 3.3 发布,10兆Linux解决思路
- core 文件没有明显异常,不能准确定位BUG,各位给点思路
- 关于tiny core linux的装配
- The absolute uri: http://java.sun.com/jstl/core cannot be resolved in ...
- <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c&q ...
- PHP Core-LifeCycle
- jQuery源码解析二(Core)
- Learning Dojo - 3.1 Core features of the Dojo language
- 【有关问题】 http://java.sun.com/jsp/jstl/core cannot be resolved
- ext-core 三 中文完全手册、文档、在线示例发布
- 页面访问时发生异常: java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/Config
- 阅览 Ext 学习Javascript(一)Core/Ext.js
- Can not find the tag library descriptor for "http://java.sun.com/jsp/jstl/core"
- Ext-API详解-core/Ext.js
- freemarker.core.InvalidReferenceException有关问题解决
- JSF小示范《Core JavaServer Faces 3rd Edition》代码
- How do I use ActiveSupport core extensions
- AS3单例、反照---mx.core.Singleton
- 没法为区域设置“zh_CN”解析资源束“core”