Есть ли способ получить доступ к объекту класса точки входа из других классов приложения?
Просто интересно, могу ли я ссылаться на объект точки входа из любого места в приложении? Может быть, это связано с каким-то глобальным объектом, как, например, сцена?
В настоящее время я использую статические методы и переменные, но это нарушает инкапсуляцию.
2 ответа
Если someObject
в списке отображения, то у вас есть someObject.root
ссылка, которую вы ищете. Если вы удалите someObject
из списка отображения, вы теряете эту ссылку.
Мой ответ - нет, прямого доступа к объекту ввода нет, и не должно быть: вот что такое инкапсуляция. Доступ к чему-то глобально - в значительной степени AS1 способ. Когда вы обращаетесь к основному экземпляру путем неявной ссылки на MainClass, вы делаете части своего приложения тесно связанными, что, как правило, плохо.
Однако, если вам это нужно, вы можете выбрать один из нескольких вариантов.
- Используйте статическую переменную:
MainClass.instance
- Используйте синглетоноподобный доступ через
MainClass.getInstance()
- Создайте переменную уровня пакета или метод получения уровня пакета
Я бы выбрал последнее.
package com.smth.application
{
public var mainObject:MainClass;
}
// in main app
package com.smth.application
{
public function MainClass()
{
mainObject = this;
}
}
Это может выглядеть несколько похожим на статический доступ, но я думаю, что таким образом ваш код сохранит некоторую гибкость.
stage
является ссылкой на верхний уровень вашего приложения, к которому вы можете получить доступ через любой экранный объект, который находится в дереве отображения, как myDisplayObject.stage
, При использовании пользовательского класса документа это будет первый дочерний элемент (индекс 0) stage
, если только вы вручную не запустите что-то еще в индекс 0, как говорит Бакапий