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. C语言每日一题之No.2

    题目:已知三个整型数8,12,6,按公式s=a+b*c计算,并显示结果 思路:定义三个整型变量a,b,c 定义一个变量s用来保存运算结果 输出 程序: #include <stdio.h> ...

  2. insmod module_param 模块参数

    模块参数 引导模块时,可以向它传递参数.要使用模块参数加载模块,这样写: insmod module.ko [param1=value param2=value ...] 为了使用这些参数的值,要在模 ...

  3. [terminal]Terminal常用快捷键

    1. 终端操作 Ctrl+d/exit 退出当前Termina1   Ctrl+l/clear  清除屏幕  Ctrl+Alt+t/Ctrl+shift+n  打开新终端窗口  Ctrl+shift+ ...

  4. mssql查询某个值存在某个表里的哪个字段的值里面

    第一步:创建 查询某个值存在某个表里的哪个字段的值里面 的存储过程 create proc spFind_Column_In_DB ( @type int,--类型:1为文字类型.2为数值类型 )-- ...

  5. 理解MVC模式

    理解一般意义上的MVC模式 MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为以下三个基本部分: 模型(Model):模型用于封装与应用程序的业务逻 ...

  6. setValue:forUndefinedKey

    *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIViewControlle ...

  7. DBA_Oracle性能优化的基本方法概述(方法论)

    2014-12-18 Created By BaoXinjian

  8. SteamVR Unity工具包(VRTK)之控制器交互

    可交互对象(VRTK_InteractableObject) 可交互对象脚本被添加到需要用(如控制器)来交互的任何游戏对象上.   可用脚本参数如下   Touch Interactions 触摸交互 ...

  9. input文本框实现宽度自适应代码实例

    代码实例如下: <!DOCTYPE html> <html><head><meta charset="utf-8"><meta ...

  10. php 封装mysql 数据库操作类

    <?phpheader('content-type:text/html;charset=utf-8');//封装mysql   连接数据库php_mysql//封装mysql   连接数据库ph ...