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/ 深拷贝是指源对象与拷贝对象互相独立,其中任何一个对象的改动都不会 ...
随机推荐
- 【Struts2学习笔记-6--】Struts2之拦截器
简单拦截器的使用 拦截器最基本的使用: 拦截方法的拦截器 拦截器的执行顺序 拦截结果的监听器-相当于 后拦截器 执行顺序: 覆盖拦截器栈里特定拦截器的参数 使用拦截器完成-权限控制 主要完成两个功能: ...
- Maven 依赖管理
1 概念介绍 之前我们说过,maven 坐标能够确定一个项目.换句话说,我们可以用它来解决依赖关系.在 POM 中,依赖关系是在 dependencies部分中定义的.在上面的 POM 例子中,我们 ...
- RadTextBox允许输入整形数字以及退格键
勿喷,谢谢!!! //允许输入整形数字以及退格键 using System.Windows.Forms; namespace BaseDataMaintain.Views.Controls{ /// ...
- 求助:为什么我用360浏览器和UC浏览器打不开JAVA中的index.html文件? 一打开就显示浏览器首界页
如下图,在oracle官网下载了一个JAVA的API文档,双击index.html时打开是浏览器的首页,不知道为什么?请问怎样才能以chm文档格式显示?
- HTML标签使用特写
页面定时刷新标签 //页面定时刷新 <meta http-equiv="> Input标记各种特殊用法 <%--禁止鼠标选择内容--%> <input id=& ...
- activiti自定义流程之Spring整合activiti-modeler5.16实例(二):创建流程模型
注:(1)环境搭建:activiti自定义流程之Spring整合activiti-modeler5.16实例(一):环境搭建 1.maven导包,这里就没有什么多的好说了,直接代码: <depe ...
- SIP 状态码
SIP应答消息状态码 与功能 类型 状态码 状态说明临时应答(1XX) 100 Trying 正在处理中180 Ringing 振铃181 call being forwarder 呼叫正在前向182 ...
- 【SQL Server】系统学习之三:逻辑查询处理阶段-六段式
一.From阶段 针对连接说明: 1.笛卡尔积 2.on筛选器 插播:unknown=not unknuwn 缺失的值: 筛选器(on where having)把unknown当做FALSE处理,排 ...
- jplayer中动态添加列表曲目(js提取request中的list数据作为js参数使用)
jplayer 的播放列表使用如下: $(document).ready(function(){ new jPlayerPlaylist({ jPlayer: "#jquery_jplaye ...
- PLSQL_基础系列09_时间戳记TIMESTAMP(案例)
2013-11-09 Created By BaoXinjian