Форум Flasher.ru

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

bettrrr 03.09.2007 19:30

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

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

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

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

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

silin 03.09.2007 23:45

Код:

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


bettrrr 04.09.2007 15:21

Цитата:

Сообщение от 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)

bettrrr 04.09.2007 15:24

и ещё, специально отдельным сообщением для модератора:

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

silin 04.09.2007 16:48

'только не в лотерею, а в карты, не машину а сто рублей, и не выиграл, а проиграл..':)
только не 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


bettrrr 04.09.2007 17:37

Цитата:

Сообщение от 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


Блин, рекурсией - это через... неправильно это, темболее, что дерево строится рекурсией и пробегать по нему ещё несколько раз это расточительно.
неужели в языке, который претендует на роль объектно-ориентированного языка нет механизма клонирования объектов???

silin 04.09.2007 18:26

Цитата:

темболее, что дерево строится рекурсией и пробегать по нему ещё..
что мешает строить сразу и клоны..
Цитата:

неужели в языке, который претендует на роль объектно-ориентированного языка нет..
похоже, что ты не зря пришел в раздел AS3 и описался с XML.., ты на пути к языку, который претендует.. и правильному его использованию..:)

bettrrr 06.09.2007 15:01

Цитата:

Сообщение от silin
что мешает строить сразу и клоны..

Я могу узнать, нужны ли клоны, только во время построения дерева (потом уже поздно), но для этого мне придётся внутри рекурсивного вызова функции вызывать другую рекурсивную функцию. :)

Ieshua 13.09.2007 16:27

Цитата:

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 :(

etc 13.09.2007 19:36

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


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

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