假设你有一个如下所示的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:未定义变量栏。”它仅适用于内部类(包外的类)。
有没有人有办法让这个工作?
答案 0 :(得分:1)
不确定是否有任何解决方法,只是为了确认:
getDefinitionByName()函数
公共职能 getDefinitionByName(名称:字符串):对象 语言版本:ActionScript 3.0 运行时版本:AIR 1.0,Flash 播放器9返回对的引用 由类指定的类的类对象 name参数。参数
name:String - 类的名称。 返回Object - 返回引用 到类的类对象 由name参数指定。
引发ReferenceError - 不公开 定义存在于指定的 名称强>
由于Bar和ChildBar都是非公开的,因此您将获得ReferenceError。
答案 1 :(得分:0)
我刚刚使用Flex 3.3(AIR app)测试了以下代码:
<?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>
Bar.as
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]
你能证实吗?这有帮助吗?