Topic:对于用户自定义的VO对象进行深拷贝,一种VO对象的某属性可能是另一种VO对象的实例。

方法1:通过传说中的“AS3隐藏特性——ByteArray.writeObject和readObject”进行操作,代码如下:

registerClassAlias("test.vo.ResVO", ResVO);
registerClassAlias("test.vo.TestVO", TestVO);
var vo:TestVO = new TestVO();
vo.name = "abc";
vo.level = 20;
vo.res = new ResVO();
vo.res.gold = 500;
var nT:int = getTimer();
var voClone:TestVO;
for (var i:int = 0; i < 100000; i++)
{
voClone = vo.clone();
}
trace(getTimer() - nT);

TestVO类代码如下:

public class TestVO
{
private var m_strName:String;
private var m_nLv:int;
private var m_obRes:ResVO;
/**
*/
public function get level():int{return m_nLv};
public function set level(nLv:int):void
{
m_nLv = nLv;
}
public function get name():String{return m_strName};
public function set name(strName:String):void
{
m_strName = strName;
}
public function get res():ResVO{return m_obRes};
public function set res(value:ResVO):void
{
m_obRes = value;
}
/**
*/
public function clone():TestVO
{
var bta:ByteArray = new ByteArray();
bta.writeObject(this);
bta.position = 0;
return bta.readObject();
}
}

ResVO类代码如下:

public class ResVO
{
private var m_nGold:int;
/**
*/
public function get gold():int{return m_nGold};
public function set gold(value:int):void
{
m_nGold = value;
}
}

执行时间:average(1662,1669,1681,1695,1691)=1680ms

另外,我们可以对TestVO.clone()函数稍加修改,使其中的ByteArray可以重用,代码如下:

public function clone(bta:ByteArray):TestVO
{
bta.length = ;
bta.writeObject(this);
bta.position = ;
return bta.readObject();
}

执行时间:average(1582,1581,1583,1575,1590)=1582ms


方法2:在VO类的clone方法中对属性逐个赋值

TestVO.clone()函数代码如下:

public function clone():TestVO
{
var voClone:TestVO = new TestVO();
voClone.level = m_nLv;
voClone.name = m_strName;
voClone.res = m_obRes.clone();
return voClone;
}

(此处省略ResVO.clone()函数代码)

执行时间:average(187,187,194,186,188)=188ms

AS3深拷贝数据对象(2)深拷贝VO对象的更多相关文章

  1. JS 数组、对象的深拷贝

    博客地址:https://ainyi.com/72 JavaScript 程序中,对于简单的数字.字符串可以通过 = 赋值拷贝 但是对于数组.对象.对象数组的拷贝,就有浅拷贝和深拷贝之分 浅拷贝就是当 ...

  2. JS中如何进行对象的深拷贝

    在JS中,一般的=号传递的都是对象/数组的引用,并没有真正地拷贝一个对象,那如何进行对象的深度拷贝呢?如果你对此也有疑问,这篇文章或许能够帮助到你 一.对象引用.浅层拷贝与深层拷贝的区别 js的对象引 ...

  3. JS对象复制(深拷贝、浅拷贝)

    如何在 JS 中复制对象 在本文中,我们将从浅拷贝(shallow copy)和深拷贝(deep copy)两个方面,介绍多种 JS 中复制对象的方法. 在开始之前,有一些基础知识值得一提:Javas ...

  4. JS 对象的深拷贝和浅拷贝

    转载于原文:https://www.cnblogs.com/dabingqi/p/8502932.html 这篇文章是转载于上面的链接地址,觉得写的非常好,所以收藏了,感谢原创作者的分享. 浅拷贝和深 ...

  5. Javascript面向对象编程(三):非构造函数的继承(对象的深拷贝与浅拷贝)

    Javascript面向对象编程(三):非构造函数的继承   作者: 阮一峰 日期: 2010年5月24日 这个系列的第一部分介绍了"封装",第二部分介绍了使用构造函数实现&quo ...

  6. 探究JS中对象的深拷贝和浅拷贝

    深拷贝和浅拷贝的区别 在讲深拷贝和浅拷贝的区别之前,回想一下我们平时拷贝一个对象时是怎么操作的?是不是像这样? var testObj1 = {a: 1, b:2}, testObj2=testObj ...

  7. javascript学习总结之对象的深拷贝和浅拷贝

    前言 最近在写ES6的文章的时候发现重复遇到关于javascript深拷贝和浅拷贝的问题,然后查找了一些资料,根据资料和自己的理解做了以下笔记,毕竟javascript关于深拷贝和浅拷贝的问题在一些面 ...

  8. C#系列——记一次业务需求:对象的深拷贝

    这篇随笔着实在意料之外,主要是源于上周开发BS的一个业务,需要用到对象的深拷贝.说的直白一点,就是将对象内存分配区和引用完全拷贝一份新的.这种需求以前就遇到过,怎么解决的已经记不清了.这次趁着这个机会 ...

  9. C#对象的深拷贝与浅拷贝

    转载自:http://blog.163.com/hr_msn/blog/static/21549405120132250396584/ 深拷贝是指源对象与拷贝对象互相独立,其中任何一个对象的改动都不会 ...

随机推荐

  1. 【1-5】jQuery对象和DOM对象

    1 jQuery对象转化为DOM对象: var $cr = $("#cr");//获得jQuery对象 var cr = $cr[0];//转化为DOM对象 或者:var cr = ...

  2. [tty与uart]stty命令使用

    中文解释链接:http://linux.51yip.com/search/stty 英文解释链接:http://pubs.opengroup.org/onlinepubs/9699919799/uti ...

  3. IOS开发之自定义系统弹出键盘上方的view(转载)

    这篇文章解决的一个开发中的实际问题就是:当弹出键盘时,自定义键盘上方的view.目前就我的经验来看,有两种解决方法.一个就是利用UITextField或者UITextView的inputAccesso ...

  4. MVC之Razor语法

    Razor是MVC3中才有的新的视图引擎.我们知道,在ASP.NET中,ASPX的视图引擎依靠<%和%>来调用C#指令.而MVC3以后有了一套新的使用@标记的Razor语法,使用起来更灵活 ...

  5. Apriori 关联算法学习

    1. 挖掘关联规则 1.1   什么是关联规则 一言蔽之,关联规则是形如X→Y的蕴涵式,表示通过X可以推导“得到”Y,其中X和Y分别称为关联规则的先导(antecedent或left-hand-sid ...

  6. PLSQL_Oracle簇表和簇表管理Index clustered tables(案例)

    2012-06-08 Created By BaoXinjian

  7. [物理学与PDEs]书中一些对数学研究有用的引理

    P 35--38 1.  若 ${\bf B}$ 为横场 ($\Div{\bf B}=0\ra {\bf k}\cdot {\bf B}=0\ra $ 波的振动方向与传播方向平行), 则 $$\bex ...

  8. 转载__UI之Frgment

    http://www.cnblogs.com/plokmju/p/3239265.html 前言 开门见山开篇名义,本篇博客将讲解一下Android中Fragment的内容,必要的地方会提供相应的演示 ...

  9. VI下删除所有内容

    让光标在一个位置 , 如果全删就放在问价开始的位置 , 在非编辑的状态下输入dG(注意大小写) , 这样光标之后的所有行都会被删掉

  10. Laravel 5 IDE Helper 安装

    一.项目地址 https://github.com/barryvdh/laravel-ide-helper 二.安装方法 1.方法一:直接使用已经生成的文件 下载 https://gist.githu ...