Просмотр полной версии : Копирование объекта!!!
У меня есть какой-то объект
my_obj1 = {id:33, par1:123, ..., parN:eeee}
его нужно скопировать в другой
если я напишу
my_obj2 = my_obj1
то у меня в my_obj2 будет ссылка на объект my_obj1 (я же правильно рассуждаю),
а мне нужно чтоб в my_obj2 был объект идентичный my_obj1.
я конечно понимаю что можно копировать каждый параметр отдельно, а можно сделать это как нить по проще ?
maelstorm
25.10.2005, 13:14
пиши свой метод. по другому никак
Как было:
obj1 = {a:11};
obj2 = obj1;
trace (obj1.a);
trace (obj2.a);
obj2.a = 22;
trace ("");
trace (obj1.a);
trace (obj2.a);
Метод клонирования:
// метод клонирования
Object.prototype.clone = function () {
var c = new Object ();
for (var n in this) {
var o = this[n];
if (typeof o == "object") {
c[n] = o.clone ();
} else {
c[n] = o;
}
}
return c;
};
// пример
obj3 = {a:33, b:{c:333}};
obj4 = obj3.clone ();
trace (obj3.a);
trace (obj3.b.c);
trace (obj4.a);
trace (obj4.b.c);
obj3.a = 44;
obj3.b.c = 444;
trace ("");
trace (obj3.a);
trace (obj3.b.c);
trace (obj4.a);
trace (obj4.b.c);
сенкс, как я и думал %((
2iNils - спасибо, избавил меня от лишней работы %)))
А такой вопрос - куда это лучше положить? всмысле куда этот код лучше положить, у меня есть несколько классов, в которых этот метод будет использоваться.
Я конечно понимаю что можно и на сцену - будет работать, но куда красивше его положить ?
но куда красивше его положить ?
Пишеш интерфейс ICloneable с методом clone - его будут наследовать все классы, которые клонируются. И пишеш класс чето типа ObjectUtils, в котором в статическом методе cloneObject реализовываеш алгоритм клонирования.
Ты учитывай, что класс MovieClip является наследником класса Object. То есть у MovieClip тоже появляется метод clone(), но вот работать он будет не так из-за строчки if (typeof o == "object").
А класть... оставь в Object.
KidsKilla
25.10.2005, 16:39
.....
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.