![]() |
Вопрос по свойству super и обработчику событий в пределах приватной функции
Здравствуйте, такой вопрос.
1.Если контейнер и элементы удаляются таким способом Код AS3:
Главный класс "Controller" из него вызывается класс(в нем создается объект класса) "UI_Connect", В классе "UI_Connect" есть метод destructor() в котором и определяется Код AS3:
Если я вызову из класса "UI_NewGame" метод destructor() из класса "UI_Connect", сработает он по такому же приципу? Тоисть удалит ли все элементы интерфейса из рабочей области? Визуально элементы удаляются в обоих случаях, но удаляются ли они полностью? Насколько я понимаю обычный класс есть наследником суперкласса, тоисть если я обращаюсь из super и удаляю элементы - удаляются элементы всех классов что есть на рабочей области? 2.Если я подписываюсь на создание события в пределах одной функции, после завершения функции обработчик события погибает? Или нужно его зачищать? Просто создается три обработчика события на таймер, в трех приватных функциях Код AS3:
Спасибо заранее, надеюсь на ответ. |
1. Во-первых, с чего бы это UI_NewGame должен подтирать UI_Connect когда есть контроллер? Во-вторых уже не важно.
2. Нет. Бред пишете. |
Цитата:
2. Почему бред? Необоснованные слова ничего не стоят, я собственно написал, чтоб знающие люди подсказали, а не сказали "true" || "false". Если есть 3 функции к примеру Код AS3:
Если такой код вы считаете плохим, тогда как создать глобальный обьект типа Timer и подписывать на него 3 различных события через определенное время? Конструктор у таймера принимает только 2 значения. |
Отписаться как-то так
Код AS3:
|
Цитата:
А на счет 1 вопроса? Спасибо. |
Хорошо, распишу подробнее.
1. this.someMethod() и super.someMethod() ссылаются на один и тот же объект. Разница в том, что первый вызывает переопределенный метод, а второй - метод, который был определен в родительском классе, но оба эти метода выполняются над данными одного и того же объекта. Нет никакой разницы как откуда и каким образом вы вызываете UI_Connect.destructor() - и this и super в нем будут указывать именно на этот экземпляр UI_Connect. Просто красивее, практичнее и логичнее было бы закрывать одно окно в контроллере, а не из другого окна (если предположить, что UI_Connect и UI_NewGame - это какие-то окна). UI_NewGame по идее вообще не должен иметь референс на UI_Connect. Раз уж у вас есть контроллер, то используйте его хоть как-нибудь. 2. Давайте по порядку: вы создаете локальный экземпляр класса Timer, подписываете на его ивент какой-то свой метод, запускаете таймер, функция завершается. Референс на созданный таймер вы после этого теряете, но сам экземпляр таймера конечно никем не убивается. По прошествии заданного интервала времени (примерно), невидимый вам таймер вызовет обработчик, который вы ему прописали. В обработчике лучше явным образом отписаться от ивента этого таймера как написал gloomyBrain чтобы сборщик мусора почистил этот таймер. В чем вообще вопрос был? Если вы хотели, чтобы таймер сам отписал всех своих листенеров и убился после завершения функции только от того что эта функция приватная - то нет, ничего такго не будет. ООП тут ни при чем. Вот, например, вы в приватной функции локально объявляете переменную типа Sprite, создаете ее экземпляр, рисуете в нем какой-нибудь квадрат и добавляете его не stage. Вы будете ожидать, что после завершения функции квадрат сам собой со stage удалится только потому что вы его нарисовали локально в приватной функции, да? |
Цитата:
2. - БРАВО! Прям в точку, а еще вспомнилось крылатое выражение "убить себя па стену". :):):):) Вы все прекрасно обьяснили. :):):) Я просто чуток сьехал на с++, где локальная переменная уничтожается при выходе из функции. :):) Спасибо огромное! |
shootkin - небольшой вопросик по первому вопросу. :)
Если я правильно понял, то например class A extends MovieClip тогда super.метод() будет вызван от класса MovieClip типо так получается... или.. :) |
Цитата:
Код AS3:
|
Свои 4 копейки:
super гарантированно дёргает метод суперкласса, this дёргает метод этого класса. Но так как при наследовании текущий класс наследует методы суперкласса, this.someMethod() вполне может дёрнуть метод суперкласса. В случае если ни numChildren, ни removeChildAt не переопределены, то нужно писать так: Код AS3:
Код AS3:
Код AS3:
|
| Часовой пояс GMT +4, время: 19:30. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.