Доступ к классу Document в AS3
Как могут экземплярированные классы получить доступ к классу Document?
Даже после того, как я назовите класс Document, используя панель свойств во Flash, попытка доступа к нему из других классов обычно терпит неудачу, говоря "попытка получить доступ к свойству undefined...
Одно решение всегда отличает класс Document к себе!, например.
Main(Main).globalMethod();
Но иногда даже эта звездная ошибка выходит из строя, а затем обычно нет выхода, кроме очевидного!
class Other{
var parentClass:Main;
public function Other(parent:Main){
parentClass = parent; // pointer to the Main class in a local var!
Main(parentClass).globalMethod();
}
}
Ответы
Ответ 1
Вы можете использовать singleton для вашего класса документа (Main
в вашем примере), который позволяет вам получить доступ к экземпляру из любого места.
public class Main extends Sprite {
private static var _instance:Main;
public static function get instance():Main { return _instance; }
public function Main() {
_instance = this;
// etc...
}
// etc...
}
Затем вы получаете доступ к экземпляру Main
следующим образом:
public class Other {
public function Other() {
Main.instance.usefulInstanceMethod();
}
}
Класс документа является довольно хорошим кандидатом для шаблона singleton, потому что обычно он должен быть доступен только для экземпляра.
Ответ 2
Класс документа по своей сути не является глобально доступным объектом. Если вы хотите вызвать методы, которые находятся в классе документа, вам всегда нужно передать ссылку от Main на любые другие классы/объекты, которые хотят вызывать его методы. Более объектно-ориентированный подход состоял бы в том, чтобы отправлять события из ваших других классов (Другие) для основного класса для прослушивания и вызова соответствующего метода сам по себе.
Если вы не заботитесь о сохранении хорошей структуры ООП и хотите получить доступ к классу документов из экранного объекта, который был добавлен в список отображения, вы можете попробовать что-то вроде: stage.getChildAt( 0 );
Ответ 3
Просто примечание, но самый короткий ответ на этот вопрос: так же, как любой класс получает доступ к любому другому классу. То есть, с прямой ссылкой или статической экспозицией. Класс документа ничем не отличается от любого другого класса в этом отношении.