PDA

Просмотр полной версии : Клонирование Object в AS 2.0


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

Я создаю 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, отредактируйте свой пост и оформите код тегами .

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.