Есть ли способ получить доступ к объекту класса точки входа из других классов приложения?

Просто интересно, могу ли я ссылаться на объект точки входа из любого места в приложении? Может быть, это связано с каким-то глобальным объектом, как, например, сцена?

В настоящее время я использую статические методы и переменные, но это нарушает инкапсуляцию.

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, как говорит Бакапий

Другие вопросы по тегам