Одним из вариантов является использование реализации метода в дочернем классе для возврата экземпляра класса с использованием его собственного applicationDomain, например:
public class Child extends Sprite implements IMyBigAwesomeClassLoader
{
public function getMyByigAwesomeClass():IMyBigAwesomeClass
{
var classDefinition:Class = applicationDomain.getDefinition("MyBigAwesomeClass");
var instance:IMyBigAwesomeClass = new classDefinition() as IMyBigAwesomeClass;
return instance;
}
}
IMyBigAwesomeClassLoader
будет выглядеть так:
public interface IMyBigAwesomeClass
{
function getMyBigAwesomeClass():IMyBigAwesomeClass;
}
Затем родительский клип будет использовать его для получения экземпляра от дочернего элемента при загрузке:
public function loadCompleteHandler(event:Event):void
{
var myBigAwesomeClassLoader:IMyBigAwesomeClassLoader = (event.target as Loader).content as IMyBigAwesomeClass;
myBigAwesomeClass = myBigAwesomeClassLoader.getMyBigAwesomeClass();
}
Причина использования интерфейсов здесь состоит в том, чтобы отделить определение класса от его реализации. Хотя класс в родительских и дочерних SWF-файлах имеет одинаковые имена, Flash рассматривает их как разные классы. Интерфейс сообщает Flash, что их можно использовать одинаково, даже если они разные.
Flash использует статическую типизацию, что означает, что после определения класса он никогда не изменится, что означает, что он никогда не перезапишет одно определение класса другим. Поэтому, если есть два класса с одинаковыми именами, необходимо использовать getDefinition
для разрешения конфликтующих имен. Если вы хотите избежать этой дополнительной сложности, вы можете использовать разные имена или пространства имен для класса в родительских и дочерних SWF-файлах.