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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 29.08.2007, 12:26
HotHead вне форума Посмотреть профиль Отправить личное сообщение для HotHead Найти все сообщения от HotHead
  № 1  
Ответить с цитированием
HotHead

Регистрация: Aug 2007
Сообщений: 2
По умолчанию Клонирование 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, т.к. объект клонируется, а не передаётся по ссылке


Последний раз редактировалось HotHead; 29.08.2007 в 13:29.
Старый 29.08.2007, 13:26
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
HotHead, отредактируйте свой пост и оформите код тегами [code][/code].

Старый 29.08.2007, 15:14
telit вне форума Посмотреть профиль Отправить личное сообщение для telit Найти все сообщения от telit
  № 3  
Ответить с цитированием
telit
 
Аватар для telit

Регистрация: Jul 2007
Сообщений: 306
Код:
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();

Старый 29.08.2007, 16:04
HotHead вне форума Посмотреть профиль Отправить личное сообщение для HotHead Найти все сообщения от HotHead
  № 4  
Ответить с цитированием
HotHead

Регистрация: Aug 2007
Сообщений: 2
Спасибо, такой вариант понятен. Я просто думал что есть что-нибудь встроенное на эту тему, типа cloneNode.

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

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

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


 


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


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