![]() |
как избежать лишнего создания копии объекта?
пусть в главном классе создан экземпляр class1 в котором приуствует слушатель на собственное событие
Код AS3:
Код AS3:
как этого избежать? |
ААААААА!! МОИ ГЛАЗА!!!
А если серьёзно, public function class1() это не класс, это функция. Вы видимо совсем запутались. Приводите весь код уж, я плохо понимаю что у вас происходит, второй кусок кода откуда вырван. Чего вы хотите добиться? Изучать архитектурные вещи можно тщательно изучив синтаксис, вы его не знаете, признайте уже очевидное. Прочитайте Колина Мука уже. |
Речь про экземпляр class1?
Вообще, всё плохо - события не стоит отправлять "кому-то", куда правильней рассылать от своего имени. Если 3 класса - родительский, class1 и class2, то лучше всего перебросить событие через родителя вот так: Код AS3:
|
все сделано для того, чтобы я мог вещать от одного класа- другому. задача стоит: чтобы один класс мог "сказать" напрямую другому- прими данные такие то и так далее.
как тогда это лучше сделать? Добавлено через 2 минуты без передачи в один класс(в конструктор) ссылки на другой класс, без использования того факта что все события дублируются на всех уровнях иерархии и оценки их через currenttarget чтобы один класс мог сказать другому классу: сделай то то! вот, возьми эти данные. |
Посмотрите на пост Тигры.
И классы в as3 не умеют рассылать события. А их экземпляры, если они наследуют все плюшечки EventDispatcher, да. Короче, экземпляр class1 диспатчит событие, другой экземпляр, который имеет ссылку на этот экземпляр, ловит событие и вызывает хендлер у экземпляра class2, на который в свою очередь тоже имеется ссылка в общем, так сказать, "родителе". |
Если Класс1 создал Класс2.
Классу1 нужно сказать что-то Классу2: напрямую дёргаем метод. Код AS3:
Код AS3:
Код AS3:
|
который имеет ссылку на этот экземпляр
----------- а как получить внутри класса ССЫЛКУ НА ЭТОТ ЭКЗЕМПЛЯР??? вот в чем проблема! |
viktorami
Приведите пожалуйста весь код который вы написали для этого теста, а то сейчас вся помощь строится на догадках. Добавлено через 32 секунды без ссылки нет взаимодействия, нет ничего плохого в передаче ссылок |
В смысле "как"? Вы же не просто вызываете конструктор класса. А пишете вот так?
Код AS3:
|
dispatchEvent(new Event('event'))
так не работает! уже пробовал. просто dispatchEvent не работает! должна быть указана его цель targetclass.dispatchEvent(new Event('event')) Добавлено через 1 минуту КорДум вот - сразу видно умного и понимающего человека) об этом и изначально была речь. если так сделать - все работает! но вопрос: получается у меня же class1 уже создан эземпляр - тот самый в котором и слушатель прописан а теперь я вынужден создавать ЕЩЕ ОДНУ ЕГО КОПИЮ КОТОРАЯ БУДЕТ ЖРАТЬ РЕСУРСЫ - ДУБЛЬ КЛАССА как же так??? |
Цитата:
|
без ссылки нет взаимодействия, нет ничего плохого в передаче ссылок
как же ничего плохого, когда я создаю копию полную копию класса всего лишь для того чтобы отправить целевой dispatch |
Копия != Ссылка
|
да нет никакой копии, от копии и событие не придёт. Вы совсем запутались в том что у вас происходит. Покажите код, весь, и вам пояснят.
|
Цитата:
И вообщем, я умываю руки. |
Класс != копия. Класс - это просто код, описывающий поведение экземпляра. Ну и может иметь статичные методы класса, но сейчас речь не об этом.
Пока Вы не создали экземпляр класса, сам класс никакой своей жизнью жить не будет. Он точно так же, как и все другие - просто будет находиться в памяти в виде байткода и ждать своего часа, когда интерпретатор заглянет в него и запомнит в память (если не ошибаюсь в работе ФП). Один раз создали экземпляр - он один раз создался. Без разницы, сколько будет подписок на него и сколько раз он продиспатчит событие. Если Вы намеренно не создадите второй такой экземпляр (не копия, просто новый), то это вы намеренно его создали. Ничего без Вашего ведома не создается, кроме клонирования Event при диспатче-всплытии (но это уже совсем другая история). |
var lnt:class1=new class1();
---------- посмотрите в моем коде эта строчка - экземпляр класса содается для того, чтобы отправит целевой dispatch но уже один экземпляр этого класса есть - получается тут копия Добавлено через 30 секунд я понимаю что класс не равно копия. но тут то создается именно новый экземпляр. Добавлено через 2 минуты Если Вы намеренно не создадите второй такой экземпляр (не копия, просто новый), то это вы намеренно его создали. --------- намеренно. но явынужден это сделать чтобы получить цель для dispatchevent вы же видите мой код выше |
Ничего не понял. Так используйте первый экземпляр. Он точно такой же экземпляр, как и вновь созданный. В смысле, тоже может диспатчить. Передавайте его по ссылке, что ли.
|
его класс 2 не видит
я не могу видеть из класса 2 класс 1 в этом то и проблема! Добавлено через 19 минут ха! по ссылке я этот метод прекрастно знаю если я его буду использовать мне и так легко и просто будут доступны все методы и процедуры другого класса. но это морока с передачей this в конструктор и так далее. пишу ведь: хочу чтобы класс диктовал свою волю произвольному классу без предыдущей передачи ссылок в конструкторы, без использования того что событие фиксирует не только объект получатель но и все остальные. чтобы один класс напрямую перкликался данными и волей с другим. |
Вы только еще больше запутываете себя и всех других. В общем, Вам бы почитать что-то про паттерны. И прочую литературку про ООП.
По конкретной задаче Цитата:
|
заранее прошу прощения, но ДАЙТЕ УЖЕ ВАШ КОД!!!ВЕСЬ!
|
Присоединяюсь к Aquahawk. Пожалуй более желанного кода с флэшера.ру я не припоминаю.
|
главный класс cosmetics из него создаем по экземпляру class1 и class2
ЗАДАЧА: отправить из класса1 событие классу2. в перспективе еще надо будет попытатся отправлять не только событие но и данные как то. Код AS3:
Код AS3:
содержимое класса class1 Код AS3:
я вынужден создавать копию класса var cl2:class2=new class2(); для того чтобы отправить dispatchEvent |
Главный класс cosmetics:
Код AS3:
А вообще можете колбэками пользоваться... |
Неееет! Hauts, неееет!
Код AS3:
|
Что-то я запутался с class1 и cl1 :)
И не могу врубиться в Код AS3:
|
Hauts мне хочется чтобы два класса перкликались ИМЕННО МЕЖДУ СОБОЙ не используя класс-общий родитель(если я правильно понял вашу идею)
Добавлено через 1 минуту кордум. для этого все равно надо имедь экземпляр cl2 а для эттого мне все равно небоходимо его вторичнное созание в экземпляре cl1 |
static public function может сгодится?
P.S. Сдаюсь. Перехожу в режим чтения :) |
Код AS3:
Это общий класс. Родитель. Называйте его как хотите. И перестаньте уже путать классы и их экземпляры. В as3 классы НЕ УМЕЮТ рассылать события. И ничего вторично создавать там не нужно. Уже все создано. |
то есть вы предлагаете создать слушатель в классе- общем родителе? а я как раз этого нехотел. хотел чтобы классы сами слышали друг друга без обращения к родителю. но чтобы и ссылки им на друг друга не передавать чур!
|
Минутку. Я соберу все свое терпение.
Напишите в этом общем классе одну единственную строчку Код AS3:
|
я соберу все свое терпение. и скажу то что сказал уже три раза. я изначально знал как это сделать при написаниее кода ВО БЩЕМ классе.
Мне очень хочется чтобы мои объекты-классы САМИ ОБЩАЛИСЬ между собой -чтобы все было В НИХ Добавлено через 1 минуту представьте- классы, как отдельные организмы с величием и славой общаются между собой. а никто этого не знает и не нужно ни о чем морочится. рай же это на земле! |
Короче. Классы не умеют рассылать события. Любой экземпляр без ссылки на другой эземпляр ничего с ним не сможет сделать. Или без их общего "контроллера".
|
а ту строчку где оператор(в моем коде)
dispatchevent убрать что ли? кроме того там остается этот второй экземпляр Добавлено через 43 секунды Короче. Классы не умеют рассылать события. Любой экземпляр без ссылки на другой эземпляр ничего с ним не сможет сделать. Или без их общего "контроллера". -------- понял. а подскажите -я добавил это сточку в общем классе. а со строчкой где disatchevent что делать? |
viktorami, завидую вашему упорству. С радостью прочитал весь топик.
Ваша проблема в том, что вы не понимаете чего хотите. Да и я этого так и не понял. В вашей голове перемешены все понятия - классы/экземпляры/объекты/методы/свойства. Цитата:
|
Я запутался в вашей архитектуре. Наверно. Или передавайте ссылку.
|
viktorami сделайте ваши классы статичными :)
|
кордум. да так работает. спасибо. при вынесенном слушателе в класс родитель. а может кто нибудь знает как передать не только само событие но и данные какие либо?
|
Посмотрите в сторону своих событий или DataEvent, если нужна просто строка.
|
оффтоп: разработчики на стороне зла, раз не дают классам общатся между собой полностью скрытно - без включения дело родителя или ссылок с класса на класс.
|
| Часовой пояс GMT +4, время: 11:45. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.