PDA

Просмотр полной версии : инициализация _экземпляра_ класса -- как?


dozen
30.05.2004, 09:00
ehlo.

Написал класс для компонента. По наивности думал, что запись


Component = function()
{
this.listeners = Array();
}


создаст по экземпляру listeners в каждом инстансе класса. Выяснилось, что это инициализация класса как такого, и listeners создается один на всех (что удобно для кэшей, но мне не надо). Ладно, обошел динамической инициализацией в методах on-demand, но всё-таки вопрос -- как написать нормальный конструктор? Который будет инициализировать инстанс?

Nox Noctis
30.05.2004, 23:27
Выяснилосьне выяснилось.

this.listeners = Array();для начала неплохо бы знать что такое вообще конструктор :)
this.listeners = new Array();

несколько путанное объяснение - покажи на примере что тебе нужно

dozen
31.05.2004, 00:07
Что new Array(), что просто Array() -- по барабану.

И проблема вообще не в этом, а в том, что конструктор Component вызывается один раз. Точнее, что он не вызывается при duplicateMovie: первый экземпляр на сцене его дергает, а копии -- нет. А вот именно копии и хотелось инициализировать.

Для себя я это обошел инициализацией в методе onLoad, который и можно считать полноценным конструктором.

dozen
31.05.2004, 00:20
А, чёрт! и onLoad не катит. Он вызывается в непредсказуемое время после duplicateMovie. То есть, получается что-то вроде:

m = duplicateMovie
m.setA();
m.setB();

... и вот тут зовется onLoad()

Так что вопрос остается открытым, но боее точным -- есть ли метод, который зовется непосредственно после duplicateMovie?

dozen
31.05.2004, 00:35
Всё, вопрос снят. После duplicateMovie зовется constructor function. Моя бага была в том, что я не дернул явно super() в сабклассе:


Component = function()
{
// init here
}

ThumbnailComponent = function()
{
super(); // was missed
}


Привык, что суперконструкторы компайлер зовет... а в ActionScript -- закат солнца вручную... ну ладно, привыкнем.

Nox Noctis
31.05.2004, 02:26
вот и славно.

я как-то затрудняюсь провесть логическую связь между первоначальным твоим сообщением и последующими... :) но будем надеяться что ты понял что ты имел в виду :))

dozen
31.05.2004, 04:37
Дык, трудно первые несколько дней. Сразу по несколько ошибок делаешь. Вот и получается, что толком не знаешь, чего спрашивать-то... ничего. Пробьемся. EJB сложнее.