0

假设您有一个如下所示的 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。” 它仅适用于内部类(包外的类)。

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

4

2 回答 2

1

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

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

getDefinitionByName () 函数
public function getDefinitionByName(name:String):Object 语言版本 : ActionScript 3.0 运行时版本 : AIR 1.0, Flash Player 9 返回对 name 参数指定的类的类对象的引用。

参数

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

引发 ReferenceError — 不存在具有指定名称的公共定义。

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

于 2009-06-17T01:18:40.563 回答
0

我刚刚使用 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]

你能证实这一点吗?这有帮助吗?

于 2009-06-17T00:42:42.227 回答