![]() |
|
||||||||||
|
|||||
|
Регистрация: Feb 2008
Сообщений: 890
|
Пытаюсь разобраться как клонировать различные объекты и чувствую, что в голове какая-то каша - понимаю, что вообще не понимаю механизм происходящего.
Вот, вроде, можно написать такую функцию, для клонирования примитивных объектов (DisplayObject пока не рассматриваем) и массивов: function clone (obj:Object):* { registerClassAlias("alias", getDefinitionByName(getQualifiedClassName(obj)) as Class); var byteArr:ByteArray = new ByteArray( ); byteArr.writeObject(obj); byteArr.position = 0; return byteArr.readObject( ); } package { public class MyClass { public var prop:int = 10; public function MyClass ( ) { } } } package { public class MyClass { public var prop:int; public function MyClass (param:int) { prop = param; } } } выкинет исключение, что неверное количество параметров - 0 параметров вместо 1 в конструкторе MyClass( ). Т.е. получается восстановление из ByteArray по сути запускает сначала конструктор? Что вообще там происходит? Проблема с неверным количеством параметров решается через присвоения дефолтного значения параметру конструктора: в этом случае, как я понимаю, при клонировании запускается конструктор с дефолтным значением параметра, а потом свойству prop клона присваивается значение свойства prop клонируемого объекта? Но если дальше еще чуть усложнить класс, то начинается петрушка, которой я не могу найти объяснения и не понимаю, что делать. package { public class MyClass { public var prop:int; public var arr:Array; public function MyClass (param1:int = 1, param2:int = 1) { prop = param1; arr = new Array(param1 * param2); } } } получаем, что длина массива my1.arr.length равна 50, но длина массива my2.arr.length равно 0. Т.е. после вызова конструктора во время клонирования не происходит дублирования значения переменной arr клонируемого объекта в значение переменной arr клона (по крайней мере с массивами это не работает). Более того, длина массива в клоне почему-то и не становится равной 1, как можно было бы ожидать при использовании дефолтных значений параметров конструктора. Для начала с этими моментами бы разобраться, а потом, если будут вопросы, я их буду задавать по ходу дальнейших попыток понять, что происходит.
__________________
скриптограф Последний раз редактировалось orcpochta; 20.03.2010 в 02:24. |
![]() |
Часовой пояс GMT +4, время: 12:01. |
|
|
« Предыдущая тема | Следующая тема » |
|
|