AS3のパッケージレスクラスのgetDefinitionByNameを取得する方法は?
-
05-07-2019 - |
質問
次のような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:変数バーが定義されていません。"内部クラス(パッケージ外のクラス)にのみ適用されます。
これを機能させる方法はありますか?
解決
回避策があるかどうかはわかりませんが、確認するだけです:
getDefinitionByName()関数
公的機能 getDefinitionByName(name:String):Object 言語バージョン:ActionScript 3.0 ランタイムバージョン:AIR 1.0、Flash Player 9は、への参照を返します によって指定されたクラスのクラスオブジェクト nameパラメーター。パラメータ
name:String—クラスの名前。 オブジェクトを返します—参照を返します クラスのクラスオブジェクトへ nameパラメーターで指定されます。
Throws ReferenceError—非公開 指定された定義が存在します 名前。
BarとChildBarはどちらも非公開なので、ReferenceErrorが発生します。
他のヒント
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>
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]
これを確認できますか?それは役立ちますか?
所属していません StackOverflow