Как получитьDefinitionByName класса без пакетов в AS3?
-
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:Переменная Bar не определена». Это применимо только к внутренним классам (классам вне пакета).
Есть ли у кого-нибудь способ заставить это работать?
Решение
Не уверен, есть ли обходной путь, но просто для подтверждения:
функция getDefinitionByName()
публичная функция getDefinitionByname (имя: строка): версия языка объекта:ActionScript 3.0 версии выполнения:Air 1.0, Flash Player 9 возвращает ссылку на объект класса класса, указанный параметром имени.Параметры
name:String — Имя класса.Возвращает объект - возвращает ссылку на объект класса класса, указанный параметром имени.
Выбросит ссылку на то, что общедоступное определение не существует с указанным именем.
Поскольку и 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>
Бар.ас
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]
Можете ли вы это подтвердить?Это помогает?