![]() |
Экземпляр, созданный при объявлении статического свойства не видит других классов
Столкнулся со следующей штукой.
Код:
class MyClass {Код:
myClass = new MyClass();(С тем же успехом вместо mx.events.EventDispatcher можно написать mx.utils.Delegate) Однако Код:
class MyOtherClass extends MyClass {Код:
myOtherClass = new MyOtherClass();Кроме того, если в MyClass заменить EventDispatcher на какой-либо из документированных классов (XML или скажем BitmapData) - тоже все нормально работает. В чем тут дело? Особый порядок инициализации классов? |
Для начала неплохо было бы все-таки написать import.
|
Цитата:
Но даже если написать import Код:
import mx.events.EventDispatcher;Ессно проверял, перед тем как постить. |
Да-да-да. Заплатка:
Код:
import mx.events.EventDispatcher; |
Цитата:
Спасиб! :) P.S. Раз речь идет о заплатке, как я понял - очередные грабли? |
У меня FDT вообще не дает объявлять непростые типы вне функций.
Грабли в том, что например вы пишете Код:
static var ref = new MyClass("from class MyClass: ");Код:
var ref = new MyClass("from class MyClass: "); |
Цитата:
1.Если так писать при объявлении свойства - будет белиберда. 2.Если ref объявить как static, а значение присваивать в конструкторе, то оно ессно будет статическим, вот только каждый раз это будет новый объект.:away: 3.Единственно что в таком варианте сработает - это написать отдельный метод, который создает экземпляр MyClass и делает ref ссылкой на него, после чего вызывать это метод единожды. А вопрос был собственно о создании экземпляра в объявлении свойств. __etc дал ответ в точку. |
Вообще говоря, лучше применять паттерн синглтон и не работать со статической ссылкой напрямую.
А заплатка… да, заплатка, потому что компилятор инициализирует все, кроме тел методов, в итоге он просто не догадывается, что EventDispatcher нужно инициализировать раньше MyClass. |
Вот собсно необходимость такой заплатки и интересовала - почему флэш в данном случае прекрасно видит документированные классы (вроде той же BitmadDatы), но не инициализирует пользовательские?
Напрашивается только один ответ. Что касается синглтона... Если интересно, могу рассказать. Есть дерево классов с бесконечным количеством дочерних классов (теоретически, практически же 5-10 уровней наследования, но сути не меняет). Статические(!) свойства любого из классов могут меняться по событию, И все экземпляры этого класса, а также экземпляры расширяющих этот класс, должны тут же отреагировать. Собственно, синглтон я сразу же и использовал - подписывать все экземпляры дочернего класса на его синглтон, а синглтон дочернего в свою очередь на синглтон родительского. Вот только одна проблема: при расширении синглтона метод getInstance в дочернем классе каждый раз надо оверрайдить. Учитывая 5-10 уровней наследования и около 200-300 классов, картинка получается жестковата, даже несмотря на то, что as-файлы будут генериться каким-нить ming'ом... В общем захотелось схалявить, и сделать это одной строчкой - через объявление статического свойства и присвоение ему экземпляра. Если есть другие решения - буду рад узнать :) |
Я собственно другой глюк имел в виду.
as Код:
Код:
Код:
А по вашему вопросу - можно так: as Код:
class Test{Код:
import Test; |
| Часовой пояс GMT +4, время: 10:44. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.