zoukankan      html  css  js  c++  java
  • as3反射应用及简要代码

    http://bbs.9ria.com/thread-133293-1-1.html

    总结下as3反射的相关用法,主要是四个函数:
    flash.system.ApplicationDomain.getDefinition(linkName:String):Class;     //flashcs元件库中的某个元件链接名称
    flash.utils.getDefinitionByName(name:String):Object;    //返回name参数指定的类的类对象引用
    flash.utils.getQualifiedClassName(value:*):String;    //返回对象的完全限定类名
    flash.utils.getQualifiedSuperClassNameTest;    // 返回value参数指定的对象的基类的完全限定类名。

    在as3.0中,你会发现在flash.utils包中有一系列函数提供了反射的功能。主要包含以下功能:
    * 确定对象的类
    * 确定接口声明的常数和方法
    * 获取类的成员、构造函数、方法、父类信息
    * 在运行时根据类名创建类的实例
    * 在运行时根据成员名称来调用对象成员
    * 在运行时根据方法名称来调用对象方法

    看代码:
    Main.as类

    1. package
    2. {
    3. import flash.display.MovieClip;
    4. import flash.display.Shape;
    5. import flash.display.Sprite;
    6. import flash.system.ApplicationDomain;
    7. import flash.utils.getDefinitionByName;
    8. import flash.utils.getQualifiedClassName;
    9. import flash.utils.getQualifiedSuperclassName;
    10. import test.IPerson;
    11. import test.PersonImplA;
    12. /**
    13. * as3反射实例
    14. * @author xuechong
    15. * @language as3 fp9
    16. * @date 2012.06.03
    17. * @QQ群交流 241294271
    18. * */
    19. public class Main extends Sprite
    20. {
    21. //private var _personAersonImplA;
    22. public function Main()
    23. {
    24. //getDefinitionFunc();
    25. getDefinitionByNameFunc();
    26. //getQualifiedClassNameFunc();
    27. //getQualifiedSuperClassNameFunc();
    28. }
    29. /**
    30. * flash.system.ApplicationDomain类中的一个函数
    31. * aa字符串就是flashcs元件库中的链接名称(也就是元件绑定的类的名字)
    32. */
    33. public function getDefinitionFunc():void
    34. {
    35. var app:ApplicationDomain = ApplicationDomain.currentDomain;
    36. try
    37. {
    38. var cls:Class = app.getDefinition("aa") as Class;
    39. var mc:MovieClip = new cls() as MovieClip;
    40. mc.y = 300;
    41. this.addChild(mc);
    42. }
    43. catch(error:ReferenceError)
    44. {
    45. trace("反射错误", error.message);
    46. }
    47. }
    48. /**
    49. * flash.utils.getDefinitionByName(name:String):Object
    50. * 返回name参数指定的类的类对象引用
    51. * 注:如果是自定义类则要先定义上此类的引用
    52. * */
    53. public function getDefinitionByNameFunc():void
    54. {
    55. var ClassReference:Class = getDefinitionByName("test.PersonImplA") as Class; //[class PersonImplA]
    56. var obj:IPerson = new ClassReference() as IPerson; //[object PersonImplA]
    57. obj.sayHello();
    58. }
    59. /**
    60. * flash.utils.getQualifiedClassName(value:*):String
    61. * 返回对象的完全限定类名
    62. * */
    63. private function getQualifiedClassNameFunc():void
    64. {
    65. var sh:Shape = new Shape();
    66. trace(getQualifiedClassName(sh)); //flash.display::Shape
    67. var aersonImplA = new PersonImplA();
    68. trace(getQualifiedClassName(a)); //test:ersonImplA
    69. trace(getQualifiedClassName(this)); //Main
    70. }
    71. /**
    72. * flash.utils.getQualifiedSuperClassNameTest
    73. * 返回value参数指定的对象的基类的完全限定类名。
    74. * 即返回继承关系上的父类
    75. * */
    76. private function getQualifiedSuperClassNameFunc():void
    77. {
    78. var sh:Shape = new Shape();
    79. trace(getQualifiedSuperclassName(sh)); //flash.display:isplayObject
    80. var aersonImplA = new PersonImplA();
    81. trace(getQualifiedSuperclassName(a)); //flash.display::Sprite
    82. trace(getQualifiedSuperclassName(this)); //flash.display::Sprite
    83. }
    84. }
    85. }
    复制代码



    IPerson.as接口

    1. package test
    2. {
    3. public interface IPerson
    4. {
    5. function sayHello():void; 
    6. }
    7. }
    复制代码



    PersonImplA.as类

    1. package test
    2. {
    3. import flash.display.Sprite;
    4. public class PersonImplA extends Sprite implements IPerson
    5. {
    6. public function PersonImplA()
    7. {
    8. }
    9. public function sayHello():void
    10. { 
    11. trace("This is PersonImplA"); 
    12. }
    13. }
    14. }
    复制代码


    PersonImplB.as类

    1. package test
    2. {
    3. import flash.display.Sprite;
    4. public class PersonImplB extends Sprite implements IPerson
    5. {
    6. public function PersonImplB()
    7. {
    8. }
    9. public function sayHello():void
    10. { 
    11. trace("This is PersonImplB"); 
    12. }
    13. } 
    14. }
    复制代码
  • 相关阅读:
    FHQ Treap(无旋 Treap)详解
    [CSP-S 2021] 廊桥分配 题解
    Splay Tree(伸展树)详解
    爬虫工程师也应该会的 NodeJS 知识(一)
    网站加密和混淆技术总结
    ip地址
    索引
    go try。。。catch
    python常见问题
    python实现发布订阅
  • 原文地址:https://www.cnblogs.com/chenhongyu/p/3477437.html
Copyright © 2011-2022 走看看