【问题标题】:How to getDefinitionByName of a packageless class in AS3?如何在 AS3 中获取无包类的定义名称?
【发布时间】:2009-06-16 19:38:32
【问题描述】:

假设您有一个如下所示的 flexunit 测试:

package foo {
    import flexunit.framework.TestCase;
    import flash.utils.getDefinitionByName;
    import flash.utils.getQualifiedSuperclassName;
    class DescribeTypeTest {
      public function testDescribeInnerType():void {
        var currentInstance:ChildBar = new ChildBar();
        trace(getDefinitionByName(getQualifiedSuperclassName(currentInstance)));
      }
    }
}
class Bar{}
class ChildBar extends Bar{}

这会引发异常“错误 #1065:未定义变量 Bar。”它只适用于内部类(包外的类)。

有没有人有办法让它工作?

【问题讨论】:

    标签: actionscript-3 reflection actionscript introspection


    【解决方案1】:

    不确定是否有任何解决方法,但只是为了确认:

    http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/utils/package.html#getDefinitionByName():

    getDefinitionByName() 函数
    公共职能 getDefinitionByName(名称:字符串):对象 语言版本:ActionScript 3.0 运行时版本:AIR 1.0、Flash 播放器 9 返回对 由指定的类的类对象 名称参数。

    参数

    name:String — 类的名称。 Returns Object — 返回一个引用 到类的类对象 由 name 参数指定。

    抛出 ReferenceError — 不公开 定义与指定的存在 名字。

    由于 Bar 和 ChildBar 都是非公开的,因此您会收到 ReferenceError。

    【讨论】:

      【解决方案2】:

      我刚刚使用 Flex 3.3(AIR 应用程序)测试了以下代码:

      <?xml version="1.0" encoding="utf-8"?>
      <mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
          creationComplete="t();">
          <mx:Script>
              <![CDATA[
                  import flash.utils.describeType;
                  import flash.utils.getQualifiedSuperclassName;
                  private function t():void {
                      trace(getDefinitionByName(getQualifiedSuperclassName(new FooBar())));
                  }
              ]]>
          </mx:Script>
      </mx:WindowedApplication>
      

      条形图

      package
      {
          public class Bar
          {
          }
      }
      

      FooBar.as

      package
      {
          public class FooBar extends Bar
          {
              public function FooBar()
              {
                  super();
              }        
          }
      }
      

      作为我看到的跟踪结果:

      [SWF] DefTest.swf - 1,024,228 bytes after decompression
      [class Bar]
      

      你能确认一下吗?这有帮助吗?

      【讨论】:

      • 不能在包裹内。重点是加载私有(无包)类。
      猜你喜欢
      • 2014-09-28
      • 2012-07-02
      • 1970-01-01
      • 2017-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多