Просмотр полной версии : Вопрос по классам
В чем понт использования AddEventListener() в классе?
------------------------------------------------
class TestClass extends MovieClip{
function TestClass(){
trace("constructor");
}
public function onRollOver(){
trace("rollover");
};
}
или такой вариант
---------------------------------------------
import mx.utils.Delegate;
class TestClass extends MovieClip{
function TestClass(){
trace("constructor");
this.addEventListener("rollover",Delegate.create(this,onRoll));
}
public function onRoll(){
trace("rollover");
};
}
В смысле интересует смысл использования Delegate с компонентами (если их так можно назвать - [InspectableList] в классе, привязаном к мувику.)
ты хоть сам понял что написал? у тебя оба твоих класса дадут ошибку при компиляции, потом при чем тут [InspectableList]?
это почемуже? Первый класс не даст никакой ошибки!
Мне интересно, задающий вопрос хотя бы раз разрабатывал что-нибудь с помощью AS2? :)
Представим себе класс..
class Foo
{
private var __XMLObj:XML;
private var __nodeName:String = "author";
public function Foo ( url:String )
{
init();
loadData( url );
}
private function init() : Void
{
__XMLObj = new XML();
__XMLObj.ignoreWhite = true;
__XMLObj.onLoad = function( success:Boolean )
{
// Тут начинается самое интересно.
// Надо как-то обратиться к __nodeName
}
}
private function loadData( url:String ) : Void
{
__XMLObj.load(url);
}
}
Можно делать в методе ссылки на самого себя, но по-моему это то еще извращение, особенно, если надо будет добраться в еще один вложенный обработчик.
Поэтому...
import mx.utils.Delegate;
class Foo
{
private var __XMLObj:XML;
private var __nodeName:String = "author";
public function Foo ( url:String )
{
init();
loadData( url );
}
private function init() : Void
{
__XMLObj = new XML();
__XMLObj.ignoreWhite = true;
__XMLObj.onLoad = Delegate.create(this, onLoadHandler);
}
private function onLoadHandler ( success:Boolean ) : Void
{
// TODO
}
private function loadData( url:String ) : Void
{
__XMLObj.load(url);
}
}
Ребят, не сочтите за тупость. Но всегда хотел спросить, и боялся.
Зачем нужны классы, и объекты???!
Простой примерчик, или даже на пальцах показать, не сочтите за труд.
П.С.
Оч хочу понять.
Раз еще не понял, значит тееб и правда не нужны. Я не думаю, что кто-то захочет писать пример в ответ.
Самое простое, что приходит в голову: скоро новый год, подумай, как ты программный снег, учитывающий ветер будешь делать? ООП эту задачу очень сильно упрощает: делаешь класс "снежинка" и задаешь ему поведение. Можно сделать еще один, контроллер. Это самый тупейший пример.
Можно расширять классы, добавляя функционал, который в данной версии не доделали макромедийцы.
Там, где есть неоднократная работа с серверной стороной, без ООП, на котором строятся фреймворки, слишком много времени будет теряться зря.
В остальном -- сам решай, нужно или нет. Для меня ответ очевиден.
а что мешает так сделать?
import mx.utils.Delegate;
class Foo
{
private var __XMLObj:XML;
private var __nodeName:String = "author";
public function Foo ( url:String )
{
init();
loadData( url );
}
private function init() : Void
{
__XMLObj = new XML();
__XMLObj.ignoreWhite = true;
__XMLObj.onLoad = onLoadHandler;
}
private function onLoadHandler ( success:Boolean ) : Void
{
// TODO
}
private function loadData( url:String ) : Void
{
__XMLObj.load(url);
}
}
И вообще я хотел узнать в чем отличия данных двух классов, данных в первом посте? То есть в чем суть использования листенера, если обработчик можно повесит прямо на класс (который экстендит мувик)
А ты попробуй, куда у тебя будет this указывать, сможешь ли ты обратиться к private-свойствам и т.п.
Прежде чем спорить лучше попробовать.
вопрос на засыпку, а нафига вверху импорт стоит?
а твой пример..ну протрейсь this в onLoadHandler.
И вообще я хотел узнать в чем отличия данных двух классов, данных в первом посте? То есть в чем суть использования листенера, если обработчик можно повесит прямо на класс (который экстендит мувик)
То, что в первом посте, я бы делать не стал. Это ненужное усложнение, не дающее выгоды. А как говорили умные товарищи Фаулер и Бек: keep it simple.
Antares,
а вот это уже интересно. В чем так усложнение? Наглядность кода же гораздо выигрышнее в первом примере!
Antares,
И как бы ты в таком случае переписал бы первый пример?
Ты не понимаешь немного. В первом посте onRollOver -- просто наследуемый метод, а не твой обработчик. Не надо в этом случае переносить области видимости, все за тебя уже перенесли.
А в примере, который привел тебе я, забив на Delegate ты вынужден будешь изобретать цепочку ссылок.
Мне нравится позиция вот таких вопрошающих. Приходит человек на форум с вопросом "зачем нужен Х". Ему отвечают. Он в ответ "но бла бла бла!!!" -- ему отвечают еще раз. Он настаивает на том, что есть средства лучше, хотя вопрос ставился совершенно не так.
Может, стоит задавать вопрос как "в чем преимущества средства Х?" Или хотя бы делать пометку: "зачем нужно средство Х? (все равно потом скажу, что У лучше)".
А в примере, который привел тебе я, забив на Delegate ты вынужден будешь изобретать цепочку ссылок.
во, тут я понял.
"в чем преимущества средства Х?"
Именно это я и хотел узнать.
-----
И все же, касательно моего примера, как бы вы написали код?
одно из главных приемуществ - это стандартный метод перевода области видимости метода. тоесть если я потом увижу в коде Delegate я сразу буду знать, что это, и буду знать что искать.
UPDATED
твой второй пример меня озадачивает, ты инициализировал класс через EventDispatcher.initialize() ? что бы использовать addEventListener ?
И все же, касательно моего примера, как бы вы написали код?
Оставил бы самый верхний вариант.
Если говорить о "лучших техниках", я бы никогда не экстендил MovieClip без лишней необходимости. Почему -- еще почти 2 года назад отлично описал Мук.
Почему -- еще почти 2 года назад отлично описал Мук.
если можно, то линк.
не помню в какой точно главе было написанно, вроде про ImageLoader
вобщем ссылка на инфу о книге http://www.moock.org/eas2/
А ты попробуй, куда у тебя будет this указывать, сможешь ли ты обратиться к private-свойствам и т.п.
Прежде чем спорить лучше попробовать.
Я наверно чего-то не знаю.
Плиз скажи, что такое private-свойства?
и как к ним обращаться?
+ Зачем?
Прости за глупость.
Но нужно наконец когда-то узнать всё об этих объектах и классах.
Читай (http://novemberain.com/livedocs/Help/UsingActionScript/00001049.html)
Тяжеловато.
Р*тот раздел кратко описывает основным принципам, используемым РїСЂРё разработке объектно-ориентированных программ. Р*ти принципы описаны более глубоко РІ оставС?ейся части этой главы, наряду СЃ тонкостями РёС… реализации РІ Macromedia Flash MX 2004 Рё Macromedia Flash MX Professional 2004.
Чтобы изучить принципы объектно-ориентированного программирования, смотри следующие топики:
Лично уменя это набор символов, а не текст.
Пожалуйсто просветите!
Просто две страки, зачем нужны классы, и зачем объекты.
Кодировку поменяй (utf-8). Если ты впервые в жизни открыл браузер и начинаешь программировать -- увы, будет тяжело. Но надо преодолеть.
Кодировка - UTF 8 поставь в ручную
Две строки:
Классы жутко удобная вещь, определяют тип объектов.
Объекты жутко удобная вещь, их взаимодействие дает возможность мыслить так же, как и в жизни.
Если интересует информация купи книжек, не хватит и двух глав книги чтоб объяснить ( у меня ушло 2 книги, по C# чтоб въехать какая это клевая штука )
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.