Как могут быть созданы экземпляры классов получить доступ к классу Document?
Даже после того, как я назовите класс документа использовал панель свойств во Flash, попытка получить к ней доступ из других классов обычно терпит неудачу, говоря "попытка доступа к неопределенному свойству ...
Одним из решений всегда является приведение класса 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();
}
}
![[UX] Категории и настройки внешнего вида Flash-сообщений](https://i.imgur.com/5LZljB8b.jpeg)
Класс документа по своей сути не является глобально доступным объектом. Если вы хотите вызвать методы, которые находятся в классе документа, вам всегда придется передавать ссылку из Main в любые другие классы / объекты, которые хотят вызвать его методы. Более объектно-ориентированный подход заключался бы в отправке событий из других ваших классов (Other), чтобы основной класс мог прослушивать и вызывать соответствующий метод сам по себе.
Если вы не заботитесь о сохранении хорошей структуры ООП и хотите получить доступ к классу документа из экранного объекта, который был добавлен в список отображения, вы можете попробовать что-то вроде: stage.getChildAt( 0 );
Вы можете использовать синглтон для своего класса документа (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();
}
}
Класс документа - довольно хороший кандидат на использование одноэлементного шаблона, потому что обычно должен быть доступен только экземпляр.
Это не синглтон, это скорее моносостояние.
Джереми: Функция свойства экземпляра просто гарантирует, что только класс Main может изменить частную переменную _instance. Обратите внимание, что сеттера нет. Мэтт: Спасибо, что просветили меня.
Небольшое примечание, но самый короткий ответ на этот вопрос: точно так же любой класс обращается к любому другому классу. То есть либо с прямым эталоном, либо со статической экспозицией. В этом отношении класс документа ничем не отличается от любого другого класса.
Действительно ли свойство instance () необходимо в главном классе? Я имею в виду, нельзя ли просто получить доступ к переменной-указателю "_instance"?