Форум 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)
-   -   Клонирование Object в AS 2.0 (http://www.flasher.ru/forum/showthread.php?t=100515)

HotHead 29.08.2007 12:26

Клонирование Object в AS 2.0
 
У меня такая проблема. Есть объекты (условно - ячейки) в которых свалена куча других объектов (пусть будут карточки). Карточки можно таскать из одной ячеки в другую по одной и пачками, у них могут меняться свойства, кадры клипа и т.п. Ко всей этой конструкции мне нужно сделать кнопку "отменить перемещение". Для этого хотелось бы запоминать состояния ячейки из которой тащат карточки и ячейки, в которую кладут карточки до претаскивания, а потом просто возвращать ячейкам исходные состояния.

Я создаю Object (ячейку), в нём куча своиств и массив карточек, который тоже заполнен Object'ами. Вопрос - можно ли как-то исхитриться и клонировать объект со всеми его внутренними объектами. Т.е. чтобы в переменной получался новый объект с идентичными свойствами, а не ссылка на "клонируемый" объект.

Должно получиться что-то вроде.
Код:

var obj, objClone;
obj = new Object;
obj.subObj = new Object;
obj.subObj.value = 100;

objClone = ... // Шаманизм, в котором клонируется obj
obj.subObj.value = 0;
trace(objClone.subObj.value); // Должно вернуть 100, а не 0, т.к. объект клонируется, а не передаётся по ссылке


etc 29.08.2007 13:26

HotHead, отредактируйте свой пост и оформите код тегами [code][/code].

telit 29.08.2007 15:14

Код:

Object.prototype.duplicateObject = function() {
        var dupObj = new Object();
        for(var i in this) {
                if (typeof(this[i]) == "object") {
                        dupObj[i] = this[i].duplicateObject();
                } else {
                        dupObj[i] = this[i];
                }
        }
        return dupObj;
}

ASSetPropFlags(Object.prototype, ["duplicateObject"], 1); // needed ATM. because Object.prototype functions shows in for..in loops

Код:

oldObject = new Object();

oldObject.foo = new Object();

oldObject.foo.dat = "Some data";

oldObject.bar = "Some other data";

newObject = oldObject.duplicateObject();


HotHead 29.08.2007 16:04

Спасибо, такой вариант понятен. Я просто думал что есть что-нибудь встроенное на эту тему, типа cloneNode.


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

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