AS3深拷贝数据对象(2)深拷贝VO对象
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对象的更多相关文章
- JS 数组、对象的深拷贝
博客地址:https://ainyi.com/72 JavaScript 程序中,对于简单的数字.字符串可以通过 = 赋值拷贝 但是对于数组.对象.对象数组的拷贝,就有浅拷贝和深拷贝之分 浅拷贝就是当 ...
- JS中如何进行对象的深拷贝
在JS中,一般的=号传递的都是对象/数组的引用,并没有真正地拷贝一个对象,那如何进行对象的深度拷贝呢?如果你对此也有疑问,这篇文章或许能够帮助到你 一.对象引用.浅层拷贝与深层拷贝的区别 js的对象引 ...
- JS对象复制(深拷贝、浅拷贝)
如何在 JS 中复制对象 在本文中,我们将从浅拷贝(shallow copy)和深拷贝(deep copy)两个方面,介绍多种 JS 中复制对象的方法. 在开始之前,有一些基础知识值得一提:Javas ...
- JS 对象的深拷贝和浅拷贝
转载于原文:https://www.cnblogs.com/dabingqi/p/8502932.html 这篇文章是转载于上面的链接地址,觉得写的非常好,所以收藏了,感谢原创作者的分享. 浅拷贝和深 ...
- Javascript面向对象编程(三):非构造函数的继承(对象的深拷贝与浅拷贝)
Javascript面向对象编程(三):非构造函数的继承 作者: 阮一峰 日期: 2010年5月24日 这个系列的第一部分介绍了"封装",第二部分介绍了使用构造函数实现&quo ...
- 探究JS中对象的深拷贝和浅拷贝
深拷贝和浅拷贝的区别 在讲深拷贝和浅拷贝的区别之前,回想一下我们平时拷贝一个对象时是怎么操作的?是不是像这样? var testObj1 = {a: 1, b:2}, testObj2=testObj ...
- javascript学习总结之对象的深拷贝和浅拷贝
前言 最近在写ES6的文章的时候发现重复遇到关于javascript深拷贝和浅拷贝的问题,然后查找了一些资料,根据资料和自己的理解做了以下笔记,毕竟javascript关于深拷贝和浅拷贝的问题在一些面 ...
- C#系列——记一次业务需求:对象的深拷贝
这篇随笔着实在意料之外,主要是源于上周开发BS的一个业务,需要用到对象的深拷贝.说的直白一点,就是将对象内存分配区和引用完全拷贝一份新的.这种需求以前就遇到过,怎么解决的已经记不清了.这次趁着这个机会 ...
- C#对象的深拷贝与浅拷贝
转载自:http://blog.163.com/hr_msn/blog/static/21549405120132250396584/ 深拷贝是指源对象与拷贝对象互相独立,其中任何一个对象的改动都不会 ...
随机推荐
- 重绘Winform窗体
本文转载自:http://www.cnblogs.com/encoding/p/5603080.html 按照惯例,先来几张样例图(注:为了展示窗口阴影效果,截图范围向外扩展了些,各位凭想象吧). 还 ...
- Python输入和输出
在很多时候,你会想要让你的程序与用户(可能是你自己)交互.你会从用户那里得到输入,然后打印一些结果.我们可以分别使用raw_input和print语句来完成这些功能.对于输出,你也可以使用多种多样的s ...
- SQLServer数据库字典维护方法
启用SQLServer启用管理器,以2008为例 1.设置表信息描述 选中要设置的表,右键点击“属性” . 选择扩展属性 填写要求: 名称:MS_Description 值: 模块名称-表名称 修改语 ...
- POWERDESIGNER中显示样式设置
1.调整表.视图的显示样式. 右键选中的对象,选择format(或ctrl+t),在弹出窗口中选中content,可以设置只显示表名还是把所有列也显示出来. 2.如何显示表中字段的code. tool ...
- Redis简单使用方法说明
安装 www.redis.io下载安装包tar zxvf redis.tar.gzcd redismakecd src && make install移动文件,便于管理:mkdir - ...
- 黄聪:如何删除wordpress登录之后wp_footer、wp_head自行加载的Open Sans字体、fonts.googleapis.com连接导致卡死的问题
有时候在浏览自己的WordPress网站时,发现网页长时间无响应, 卡在正在连接到fonts.googleapis.com ,如下图所示: 查看网页源码时,发现Head里面有如下一段代码: <l ...
- (PowerShell) Managing Windows Registry
http://powershell.com/cs/blogs/ebookv2/archive/2012/03/23/chapter-16-managing-windows-registry.aspx
- Report_客制化Excel报表中的XLS标记(案例)
2014-06-06 Created By BaoXinjian
- Mac 10.10下安装MySQL5.6.21提示安装失败
只要要在安装的第三步在自定里不要选Startup item就可以了
- Git中的文件状态和使用
(暂存区 即Index In Git) commit 到 local respository的内容,不想push,则使用git reset 将文件状态回转到staged|modified|unstag ...