Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Вопрос по классам (http://www.flasher.ru/forum/showthread.php?t=73124)

ir73 13.12.2005 18:05

Вопрос по классам
 
В чем понт использования 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");
};
}

ir73 13.12.2005 18:23

В смысле интересует смысл использования Delegate с компонентами (если их так можно назвать - [InspectableList] в классе, привязаном к мувику.)

s_u_m_p 13.12.2005 20:00

ты хоть сам понял что написал? у тебя оба твоих класса дадут ошибку при компиляции, потом при чем тут [InspectableList]?

ir73 18.12.2005 13:21

это почемуже? Первый класс не даст никакой ошибки!

Antares 18.12.2005 18:15

Мне интересно, задающий вопрос хотя бы раз разрабатывал что-нибудь с помощью 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);
        }
}


Ser D 18.12.2005 20:56

Ребят, не сочтите за тупость. Но всегда хотел спросить, и боялся.

Зачем нужны классы, и объекты???!

Простой примерчик, или даже на пальцах показать, не сочтите за труд.

П.С.
Оч хочу понять.

Antares 18.12.2005 21:24

Раз еще не понял, значит тееб и правда не нужны. Я не думаю, что кто-то захочет писать пример в ответ.

Самое простое, что приходит в голову: скоро новый год, подумай, как ты программный снег, учитывающий ветер будешь делать? ООП эту задачу очень сильно упрощает: делаешь класс "снежинка" и задаешь ему поведение. Можно сделать еще один, контроллер. Это самый тупейший пример.

Можно расширять классы, добавляя функционал, который в данной версии не доделали макромедийцы.

Там, где есть неоднократная работа с серверной стороной, без ООП, на котором строятся фреймворки, слишком много времени будет теряться зря.

В остальном -- сам решай, нужно или нет. Для меня ответ очевиден.

ir73 18.12.2005 21:28

а что мешает так сделать?
Код:

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);
        }
}


ir73 18.12.2005 21:30

И вообще я хотел узнать в чем отличия данных двух классов, данных в первом посте? То есть в чем суть использования листенера, если обработчик можно повесит прямо на класс (который экстендит мувик)

Antares 18.12.2005 21:30

А ты попробуй, куда у тебя будет this указывать, сможешь ли ты обратиться к private-свойствам и т.п.

Прежде чем спорить лучше попробовать.


Часовой пояс GMT +4, время: 23:21.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.