`
hereson
  • 浏览: 1454490 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

ActionScript3.0/Flex2中的反射

阅读更多

在ActionScript 3中,你会发现在flash.utils包中有一系列函数提供了反射的功能。主要包含以下功能:

    * 确定对象的类
    * 获取类的成员、方法、构造函数、父类的信息
    * 确定接口声明的常数和方法
    * 在运行时根据类名创建类的实例
    * 在运行时根据成员名称获取或者设置对象成员的值
    * 在运行时根据方法名称,调用对象的方法

你可以使用类似于"describeType"之类的功能,它返回一个Xml对象。举一个例子:

package {
    import flash.display.Sprite;
    import flash.utils.describeType;
  
    public class DescribeTypeExample extends Sprite {
        public function DescribeTypeExample() {
            var child:Sprite = new Sprite();
            var description:XML = describeType(child);
            trace(description..accessor.@name.toXMLString());
        }
    }
}

如果你想进一步,根据类名创建对象的实例,我们可以使用"getDefinitionByName()"

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

尽管这是一些非常方便的方法,但是在FlashPlayer中使用反射还是会有许多的限制,因为缺乏运行时的动态源码编译。上面的功能对于那些在内建的类,比如:Sprite类来说无疑是有用的,但是对于自定义类来说,我们会遇到很多麻烦。比如:

package {
    import com.customtypes.string; // Custom String Implementation Class
    import flash.utils.getDefinitionByName;

    public class GetDefinitionByNameExample {
        public function GetDefinitionByNameExample() {
            var ClassReference:Class = getDefinitionByName(“com.customtypes.string”) as Class;
            var instance:Object = new ClassReference();
            instance.customParameter = “my parameter”;
        }
    }
}

尽管我们使用了import语句,但是"getDefinitionByName()"还是会失败。原因上面已经说过了,在运行时编译源代码是不允许的。也许以后可以。在目前情况下,要实现上述功能,至少要在代码中初始化一个类的实例。也就是声明一个类的实例:

var customType : com.customtypes.string;

分享到:
评论

相关推荐

    ActionScript教程 Flex教程 ActionScript+Flex教程

    - **视频教程**:ActionScript 3.0和Flex的视频教程涵盖了从入门到精通的不同层次,适合初学者快速上手。 - **书籍资料**:《ActionScript 3.0殿堂之路》、《高级ActionScript 3.0设计模式》等书籍深入讲解了高级...

    PV3D的开源代码(flash actionscript)

    ActionScript 3.0是Adobe Flex和Flash开发中的主要编程语言,相较于早期版本,它有显著的性能提升和更严谨的面向对象特性。ActionScript 3.0引入了强类型、类和包的概念,使得代码更加模块化和可维护。在PV3D项目中...

    Flex 反射示例

    Flex反射是Adobe Flex框架中的一个重要特性,它允许在运行时检查和操作类、对象、方法、属性等元数据。在Flex编程中,反射提供了一种动态访问和操作应用程序组件的能力,即使在编译时未知其具体类型的情况下也可以...

    flex弹球对战游戏

    Flex是Adobe公司推出的一个开源框架,用于构建富互联网应用程序(RIA),它基于ActionScript 3.0和MXML,提供了强大的用户界面组件库,使开发者可以轻松创建具有交互性和动态性的Web应用。 在这款游戏中,“弹球”...

    flex3d实例

    1. **ActionScript 3.0**:作为Flex 3D的基础,ActionScript 3.0是AS语言的一个重大升级,提供了类型检查、垃圾回收等特性,显著提高了性能和开发效率。在Flex 3D中,开发者通过ActionScript来编写3D对象的交互逻辑...

    flex/flash 3d基础1

    在Flash和Flex中,3D渲染主要依赖于ActionScript 3.0,这是一个面向对象的编程语言,用于编写运行在Flash Player或Adobe AIR上的交互式内容。在这个案例中,"Figure"可能是一个用ActionScript编写的3D对象,它可以是...

    As2Commons反射

    As2Commons是一个基于ActionScript 3.0的开源库,提供了丰富的工具和实用程序,其中包括了对反射的支持。它为开发者提供了一系列API,用于处理类和对象的信息,从而使得开发者能够在运行时动态地访问和修改类的行为...

    Flex 3D圆形隧道效果

    Flex是由Adobe开发的一种基于ActionScript 3.0的开源框架,用于构建具有丰富用户界面的Flash应用程序。在Flex中实现3D效果,可以让开发者创建出更为生动和立体的交互体验。 在Flex中实现3D圆形隧道效果,需要掌握...

    Flex 和 java 整合 教程

    2. **RemoteObject**:Flex中的RemoteObject组件用于调用后端服务,实现数据交互。 3. **LCDS**:作为数据服务中间件,它提供了对Flex和Java之间的AMF数据传输支持。 4. **Spring**:SpringFactory类和反射机制,...

    Flex特效示例

    Flex特效示例主要展示了在ActionScript 3.0框架下使用Adobe Flex进行视觉效果和动画设计的各种技术。Flex是一款强大的开发工具,用于构建富互联网应用程序(RIA),它提供了丰富的组件库和强大的图形处理能力,使得...

    Flex 3D自己学习过程中的例子

    Flex 3D是一种基于Adobe ...同时,你还需要学习相关的Flex SDK和ActionScript 3.0知识,以便更好地理解和修改代码。记住,动手实践是学习任何技术的最佳途径,所以尝试运行和调试这些示例,以加深对Flex 3D的理解。

    flex3d特效

    - **Adobe Flex**:一个用于构建富互联网应用程序(RIA)的开放源代码框架,基于ActionScript 3.0和Flash Player或Adobe AIR运行时。 - **3D图形渲染**:Flex3D通过Stage3D API实现了3D图形的硬件加速渲染,提高了...

    Papervision3D 教程打包下载

    Papervision3D 是一个基于ActionScript 3.0的开源库,专门用于在Adobe Flash平台上构建三维(3D)图形和交互式应用程序。这个教程集合提供了深入学习Papervision3D所需的知识,包括PV3D的基本概念、对象模型、渲染...

    初识Papervision3D

    Papervision3D就是这样一个强大的开源库,它为ActionScript 3.0开发者提供了在Flash平台上构建三维(3D)图形的能力。 Papervision3D是基于Adobe Flash的3D渲染引擎,它允许开发者在浏览器中创建复杂的3D场景,包括...

    《Papervision3D_Essentials》中文翻译

    - **Papervision3D**是一款针对Adobe Flash平台的开源3D渲染引擎,允许开发者利用ActionScript 3.0在Flash Player环境中创建交互式的三维场景。 - 本书《Papervision3D_Essentials》是一本全面介绍Papervision3D使用...

Global site tag (gtag.js) - Google Analytics