Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   наследование классов: реализация функции clone() объектов (http://www.flasher.ru/forum/showthread.php?t=140482)

incvizitor 01.06.2010 11:59

Цитата:

Только так не скомпилируется
Под рукой нету примера, но точно помню что такое у меня компилировалось =)

Добавлено через 2 минуты
Цитата:

Только все равно смысла в этом не много, т.как если нужно переопределить этот метод, то толку от всех этих ухищрений будет не много.
Можно переопределять только метод _initProps, а метод clone оставить в покое.

wvxvw 01.06.2010 13:54

baseObjectPtr:curClass= new curClass();
Вот эта строчка - это что? Метка цикла? Объявление переменной (без var)? curClass нельзя использовать в качестве типа, тип должен быть известен на момент компиляции.

А зачем 2 функции, и одну из двух оверрайдить, если можно только одну, и ее же оверрайдить?

litebox 01.06.2010 14:48

Да уж, варианты интересные, особенно порадовал с использованием ByteArray ))
Пожалуй, оставлю, как есть )

Psycho Tiger 01.06.2010 14:48

Как вариант можно сделать метод applyAllParametrs, чтобы метод clone выглядел вот так:
Код AS3:

public function clone():BaseObject{
var obj:BaseObject=new BaseObject();
applyAllParameters(obj);
return obj;
}

Это решит проблему.

i.o. 01.06.2010 15:12

Цитата:

applyAllParameters(obj);
по сути то же самое, что и во втором посте
Код AS3:

protected function _copyFrom_BaseObject( source:BaseObject ):void

только наоборот, как я понимаю

Если нужна компактность, то вот как такой вариант:
Код AS3:

public class BaseObject
{
...............
 
        public function clone():BaseObject
        {
                var _clone:BaseObject = new BaseObject();
                    _clone.copyFrom( this );
 
                return _clone;
        }
 
        public function copyFrom( source:BaseObject ):void
        {
                this.id = source.id;
                this.name = source.name;
                this.type = source.type;
        }
 
...............
 
}

Код AS3:

public class WorldObject extends BaseObject
{
        private var currAnim:String;
 
 
        override public function clone():BaseObject
        {
                var _clone:WorldObject = new WorldObject();
                    _clone.copyFrom( this );
 
                return _clone;
        }
 
        override public function copyFrom( source:BaseObject ):void
        {
                super.copyFrom( source );
 
                if( !(source is WorldObject) )
                        return;
 
                this.currAnim = (source as WorldObject).currAnim;
        }
}

В принципе вот эту проверку можно опустить:
Код AS3:

                if( !(source is WorldObject) )
                        return;

Добавлено через 14 минут
Ну вот вообще компакт )))
Код AS3:

public class BaseObject
{
...............
 
        public function clone():BaseObject
        {
                return copyTo( new BaseObject() );
        }
 
        public function copyTo( dest:BaseObject ):BaseObject
        {
                dest.id = this.id;
                dest.name = this.name;
                dest.type = this.type;
 
                return dest;
        }
 
...............
 
}

Код AS3:

public class WorldObject extends BaseObject
{
        private var currAnim:String;
 
 
        override public function clone():BaseObject
        {
                return copyTo( new WorldObject() );
        }
 
        override public function copyTo( dest:BaseObject ):BaseObject
        {
                super.copyTo( dest );
 
                if( dest is WorldObject )
                        (dest as WorldObject).currAnim = this.currAnim;
 
                return dest;
        }
}

А какая гибкость )))

incvizitor 01.06.2010 16:06

wvxvw, ну да, запятую пропустил =)
curClass, По любому известен, так как это наш данный класс, и если наш класс компилируется, то curClass будет известен.

Ладно, мне с Вами спорить еще рано :)


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

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