С помощью класса ByteArray, мы можем копировать полностью объекты. Под полным копированием имеется ввиду, что мы можем копировать так же "дочерние" объекты копируемого объекта, и так далее. Например если у нас есть массив с объектами, и мы копируем его, то кроме самого массива скопируются и объекты.
Пример функции:
Код:
import flash.utils.ByteArray;
function clone(source:Object):* {
var copier:ByteArray = new ByteArray();
copier.writeObject(source);
copier.position = 0;
return(copier.readObject());
}
Использование:
Код:
newObjectCopy = clone(originalObject);
Nirth: Информация о классе не сохраняется, но мы можем воспользоватся кастингом:
Код:
package {
import flash.display.*;
import flash.utils.*;
dynamic public class Test extends Sprite
{
public function Test()
{
var user:UserInfo = new UserInfo();
user.name = "David";
user.email = "david@david.com";
user.page = new HomePage();
user.page.title = "David";
user.page.url = "david.com";
trace("user class name:",getQualifiedClassName(user));
trace("user.page class name:",getQualifiedClassName(user.page));
var user2:UserInfo = clone(user) as UserInfo;
trace("user2 class name:",getQualifiedClassName(user));
trace("user2.page class name:",getQualifiedClassName(user.page));
}
private function clone(source:Object):* {
var copier:ByteArray = new ByteArray();
copier.writeObject(source);
copier.position = 0;
return(copier.readObject());
}
}
}
class UserInfo
{
internal var name:String;
internal var email:String;
internal var page:HomePage;
public function UserInfo()
{
}
}
class HomePage
{
internal var url:String;
internal var title:String;
public function HomePage()
{
}
}
Данный метод хорошо подходит для чистых
DTO/VO объектов.