Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Клонирование объектов (http://www.flasher.ru/forum/showthread.php?t=153871)

chatman 09.04.2011 20:21

Клонирование объектов
 
Есть палитра компонентов для схемы. У каждого компонента есть общий класс: Component, этот класс наследуется собственным классом компонента.

В общем случае это выглядит так:
http://pavel.server.su/class-as3.PNG

Вопрос такой: как заставить общий класс Component клонировать дочерние объекты? Не хочется писать собственный метод клонирования для каждого класса. Или может прототип какой-нибудь можно написать?

expl 09.04.2011 21:52

Визуальные компоненты, насколько знаю не клонируются, так что через сеарилизацию не получится.
Теоретически можно склонировать значения полей через рефлексию, но только открытых.
Если у Вас чисто графика, что на graphics рисуется - можно склонировать его.
Если нет - ИМХО для каждого - свой метод clone() - самое простое

chatman 10.04.2011 22:16

Спасибо за информацию. Но неужели нет другого способа? В дочерних объектах функциях клонирования будет одинаковая. Будут различаться только имена классов.

Может есть что-нибудь типа такого?
Код AS3:

var newElement = new this();

Или как-то так.

dimarik 10.04.2011 22:21

есть new (this as Object).constructor();

dodoaav 10.04.2011 22:34

Но подобный метод не будет клонированием, поскольку никакие свойства объекта клону переданы не будут.
Для сохранения свойств можно было бы добавить отдельную переменную (массив), где были бы перечислены названия свойств, которые нужно установить клону.

dimarik 10.04.2011 22:37

Почти. Очевидно, что новый объект с умолчальными свойствами является полным клоном другого объекта такого же класса с умолчальными свойствами )

Psycho Tiger 10.04.2011 22:49

Всё таки я бы не поленился переопределять clone() в каждом наследнике.

chatman 11.04.2011 00:24

Цитата:

Сообщение от Psycho Tiger (Сообщение 988316)
Всё таки я бы не поленился переопределять clone() в каждом наследнике.

А дело тут не в лени, а в том, что это будет сплошной Copy/Paste, а это неправильная концепция программирования.

Цитата:

Сообщение от dodoaav (Сообщение 988313)
Но подобный метод не будет клонированием, поскольку никакие свойства объекта клону переданы не будут.
Для сохранения свойств можно было бы добавить отдельную переменную (массив), где были бы перечислены названия свойств, которые нужно установить клону.

Абсолютно верное замечание! Только мне нужно просто запустить конструктор нового неявного объекта. Свойства копировать не нужно. (прошу прощения, наверное, я неправильно тему назвал)

dimarik, огромное спасибо! Это то, что мне нужно было. Объект нормально воссоздаётся.

Сейчас будем тестировать поведение с другими объектами. Есть некоторые сомнения.

Добавлено через 6 минут
dimarik, ещё раз огромное спасибо! Всё отлично заработало, а самое главное, что структура кода осталась весьма симпатичной и элегантной.

dimarik 11.04.2011 00:38

Да, Вы неправильно назвали тему ). Клонирование = копирование. Чистый лист бумаги - это объект с умолчальными свойствами. Записки на такой бумажке хорошо копирует... копир )

Psycho Tiger 11.04.2011 12:13

Цитата:

А дело тут не в лени, а в том, что это будет сплошной Copy/Paste, а это неправильная концепция программирования.
У суперклассов тоже должен быть clone. В конечном итоге никакого копипаста не будет вообще.


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

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