Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Закрытая тема
Старый 03.09.2007, 19:30
bettrrr вне форума Посмотреть профиль Отправить личное сообщение для bettrrr Найти все сообщения от bettrrr
  № 1  
bettrrr
[+4 06.08.07]

Регистрация: Aug 2002
Сообщений: 44
По умолчанию Клонирование Object

Есть дерево объектов, которое получено в результате парсинга XML.
Дерево неопределённой структуры.
node1.node2.....nodeX
node1.nodeA.....nodeY
Неопределённое количество ветвей и узлов.

Вне надо клонировать одну ветвь, что-то вроде:
tmp = node1.node2;

Нужен именно дубликат, т.к. с самим деревом будут производиться трансформации.

Всё написано на AS2.

Подскажите, как сделать клон объекта/ветви?


Последний раз редактировалось bettrrr; 04.09.2007 в 15:22.
Старый 03.09.2007, 23:45
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 2  
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
Код:
var xml:XML =
<tree>
	<item>
		<val>init</val>
	</item>
	<item />
</tree>;
var node:XMLList=new XMLList(xml.item[0]);
var nodeCopy:XMLList=node.copy();
node.val="changed";
trace("node:"+node);
trace("nodeCopy: "+nodeCopy);

Старый 04.09.2007, 15:21
bettrrr вне форума Посмотреть профиль Отправить личное сообщение для bettrrr Найти все сообщения от bettrrr
  № 3  
bettrrr
[+4 06.08.07]

Регистрация: Aug 2002
Сообщений: 44
Цитата:
Сообщение от silin
Код:
var xml:XML =
<tree>
	<item>
		<val>init</val>
	</item>
	<item />
</tree>;
var node:XMLList=new XMLList(xml.item[0]);
var nodeCopy:XMLList=node.copy();
node.val="changed";
trace("node:"+node);
trace("nodeCopy: "+nodeCopy);
нет, делево получено в результате моего парсинга и оно не является объектом класса XML

Зря я написал про XML.

Это просто дерево объектов, неопределённой структуры, вида

Код HTML:
-----------obj--------------
|           |              |.....
obj2       obj4
|           |
obj3   ----obj5-----
      |     |      |
     objX  objY  objZ
Структура произвольная.
И мне надо скопировать одну из ветвей (например obj5)

Старый 04.09.2007, 15:24
bettrrr вне форума Посмотреть профиль Отправить личное сообщение для bettrrr Найти все сообщения от bettrrr
  № 4  
bettrrr
[+4 06.08.07]

Регистрация: Aug 2002
Сообщений: 44
и ещё, специально отдельным сообщением для модератора:

я ошибся в первом посте, когда написал про AS3, это опечатка! Скрипт на AS2

Старый 04.09.2007, 16:48
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 5  
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
'только не в лотерею, а в карты, не машину а сто рублей, и не выиграл, а проиграл..'
только не AS3 и не XML..
тогда можно рекурсией обойти нод, как-то так:
Код:
function cloneObj(obj){
	var clone={};
	var cont=0;
	for( var i in obj){
		clone[i]=cloneObj(obj[i]);
		cont++;
	}
	return cont ? clone : obj;
}

var tree={node1:{node11:{node111:111,node112:112},node12:12},node2:{node22:22}};
var node=tree.node1;
nodeCopy=cloneObj(node);
node.node11.node111="XXX";
trace(nodeCopy.node11.node111);//111

Старый 04.09.2007, 17:37
bettrrr вне форума Посмотреть профиль Отправить личное сообщение для bettrrr Найти все сообщения от bettrrr
  № 6  
bettrrr
[+4 06.08.07]

Регистрация: Aug 2002
Сообщений: 44
Цитата:
Сообщение от silin
'только не в лотерею, а в карты, не машину а сто рублей, и не выиграл, а проиграл..'
только не AS3 и не XML..
тогда можно рекурсией обойти нод, как-то так:
Код:
function cloneObj(obj){
	var clone={};
	var cont=0;
	for( var i in obj){
		clone[i]=cloneObj(obj[i]);
		cont++;
	}
	return cont ? clone : obj;
}

var tree={node1:{node11:{node111:111,node112:112},node12:12},node2:{node22:22}};
var node=tree.node1;
nodeCopy=cloneObj(node);
node.node11.node111="XXX";
trace(nodeCopy.node11.node111);//111
Блин, рекурсией - это через... неправильно это, темболее, что дерево строится рекурсией и пробегать по нему ещё несколько раз это расточительно.
неужели в языке, который претендует на роль объектно-ориентированного языка нет механизма клонирования объектов???

Старый 04.09.2007, 18:26
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 7  
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
Цитата:
темболее, что дерево строится рекурсией и пробегать по нему ещё..
что мешает строить сразу и клоны..
Цитата:
неужели в языке, который претендует на роль объектно-ориентированного языка нет..
похоже, что ты не зря пришел в раздел AS3 и описался с XML.., ты на пути к языку, который претендует.. и правильному его использованию..

Старый 06.09.2007, 15:01
bettrrr вне форума Посмотреть профиль Отправить личное сообщение для bettrrr Найти все сообщения от bettrrr
  № 8  
bettrrr
[+4 06.08.07]

Регистрация: Aug 2002
Сообщений: 44
Цитата:
Сообщение от silin
что мешает строить сразу и клоны..
Я могу узнать, нужны ли клоны, только во время построения дерева (потом уже поздно), но для этого мне придётся внутри рекурсивного вызова функции вызывать другую рекурсивную функцию.

Старый 13.09.2007, 16:27
Ieshua вне форума Посмотреть профиль Отправить личное сообщение для Ieshua Найти все сообщения от Ieshua
  № 9  
Ieshua

Регистрация: May 2004
Адрес: Москва
Сообщений: 76
Цитата:
Class ObjectUtil
Methods:

copy(value:Object):Object
[static] Copies the specified Object and returns a reference to the copy.
copyright

but only for flex project
__________________
Улыбка - понятие растяжимое...


Последний раз редактировалось Ieshua; 13.09.2007 в 16:50.
Старый 13.09.2007, 19:36
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 10  
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Чего прикажете с темой делать? Двигать отсюдова или оставить? Вот, честно, я не знаю, чего с ней делать.
В следующий раз выбирайте разделы правильно.

Создать новую тему Закрытая тема Часовой пояс GMT +4, время: 18:50.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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