`

AS3对象深复制

    博客分类:
  • Flex
 
阅读更多

先来看下面的代码:
var initialObj:Object=new Object();
initialObj.name="名字";


var afterObj:Object=initialObj;
afterObj.name="改名了";
trace("initialObj的名字:"+initialObj.name);//输出“改名了”
trace("afterObj的名字:"+afterObj.name);//输出“改名了”

  如果是新手,可能你会紧张的发现initialObj的名字也变成了"改名了",但并没有更改过他的名字啊

  首先要知道的是AS3里总的分为两种数据类型——基元数据类型也叫原始数据类型和复杂数据类型也叫引用数据类型,具体是什么可以到网上查下相关资料, 如果网上资料不多,过完年我会回来补上。
  因为Object是一个复杂数据类型把initialObj赋值给afterOb(就是这行var afterObj:Object=initialObj;)其实是把initialObj和afterOb指向内存中的同一地址,所以改变了 afterObj,initialObj也改变了。
  如何复制一个和initialObj一模一样的对象,而更改复制的对象又不影响initialObj呢,就要用到下面的复制方法,统称“深复制”


//声明一个Object类型的变量initialObj,并添加一个名为name的属性,属性值为“名字”
var initialObj:Object=new Object();
initialObj.name="名字";


//声明ba并把initialObj写入到ba中,也就是使用二进制数据存储initialObj
var ba:ByteArray=new ByteArray();
ba.writeObject(initialObj);
ba.position=0;


//声明afterObj并从ba读取initialObj,其实读取的是和initialObj长的一模一样的一个对象,并不是 initialObj
var afterObj:Object=ba.readObject();
afterObj.name="改名了";
trace("initialObj的名字:"+initialObj.name);//输出“名字”
trace("afterObj的名字:"+afterObj.name);//输出“改名了”

分享到:
评论

相关推荐

    DeepCopier:一个小型且高效的库,可以按表达式树深层复制对象

    DeepCopier是一个小型库,可以按表达式树深层复制对象。 安装: 安装DeepCopier 。 用法示例: 1.深度复制源对象。 SomeType obj1 = new SomeType (); SomeType obj2 = Copier . Copy ( obj1 ); List < SomeType> ...

    JavaScript 复制对象与Object.assign方法无法实现深复制

    而复杂数据类型包括Object,而所有其他引用类型(Array、Date、RegExp、Function、基本包装类型(Boolean、String、Number)、Math等)都是Object类型的实例对象,因此都可以继承Object原型对象的一些属性和方法。...

    javascript二维数组和对象的深拷贝与浅拷贝实例分析

    本文实例讲述了javascript二维数组和对象的深拷贝与浅拷贝。分享给大家供大家参考,具体如下: 这篇文章主要为大家详细介绍了js实现数组和对象的深浅拷贝, 1.浅拷贝: 将原对象或原数组的引用直接赋给新对象,新...

    javascript中数组深拷贝途径及对象数组深拷贝

    javascript中数组深拷贝途径及对象数组深拷贝 什么是浅拷贝 在js当中,我们常常遇到数组复制的的情况,许多人一般都会使用“=”来直接把一个数组赋值给一个变量,如: var a=[1,2,3]; var b=a; console.log(b); ...

    javascript中的深复制详解及实例分析

    javascript中的深复制 JavaScript深拷贝是初学者甚至有经验的开发着,都会经常遇到问题,并不能很好的理解javascript的深拷贝。  深拷贝(deepClone)是神马,与深拷贝相对应的就是浅拷贝,刚开始我也没弄懂。  在很...

    JavaScript对象拷贝与Object.assign用法实例分析

    因此对 JavaScript 中的复杂数据类型(object)来说,也会有浅拷贝和深拷贝的概念:浅拷贝指两个不同的变量存的是同一个对象的地址,即两个变量指向同一块内存区域;深拷贝则是重新分配了一块内

    helms:深入JavaScript对象操作

    如果as是文字,它将返回该文字,否则它将创建一个完全独立于a的新对象。 它将创建本机对象类型,如Dates和Regexp,但不会创建新的类实例。 合并 merge(a: Object, b: Object) -> Void 将b深合并到a 。 这是幂等的...

    PHP对象转换为数组函数(递归方法)

    复制代码 代码如下: function object_to_array($obj) { $_arr = is_object($obj) ? get_object_vars($obj) : $obj; foreach ($_arr as $key => $val) { $val = (is_array($val) || is_object($val)) ? object_to_...

    对python pandas中 inplace 参数的理解

    默认是False,即创建新的对象进行修改,原对象不变,和深复制和浅复制有些类似。 例: inplace=True情况: import pandas as pd import numpy as np df=pd.DataFrame(np.random.randn(4,3),columns=["A","B","C"]) ...

    浅谈Javascript中深复制

    在javascript中,所有的object变量之间的赋值都是传地址的,可能有同学会问哪些是object对象。举例子来说明可能会比较好: 代码如下: typeof(true) //”boolean” ...所以其实我们深复制主要需要处理的对象就是objec

    javascript对浅拷贝和深拷贝的详解

    下面小编就为大家带来一篇浅谈JavaScript中面向对象的的深拷贝和浅拷贝。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。 1.浅拷贝:复制一份引用,所有引用对象都指向一份数据,并且都可以修改这份数据。 ...

    AspNet MVC 开发技术

    11.1.8 给Cardlib添加深复制 261 11.2 比较 263 11.2.1 类型比较 263 11.2.2 值比较 268 11.3 转换 283 11.3.1 重载转换运算符 284 11.3.2 as运算符 285 11.4 小结 286 11.5 练习 286 11.6 本章要点 287 第12章 泛型...

    C++智能指针原理.pdf

    假设使⽤它进⾏内存管理,看下⾯的赋 值语句: mysmart_ptr<string> ps (new string("I reigned lonely as a cloud.")); mysmart_ptr<string> vocation; vocation = ps; 上⾯ps和vocation将指向同⼀个string对象,...

    visio教程PDF

    16.5.3 使用层选进行复制 16.5.4 使用Chart Shape Wlzard创建堆叠式和可扩展图形 16.6 小结第17章 连接图形 17.1 Visio中的图形和连接器 17.2 连接点、连接器工具和静态粘贴 17.2.1 使用静态粘贴的...

    Visio 2000 技术大全

    16.5.3 使用层选进行复制 16.5.4 使用Chart Shape Wlzard创建堆叠式和可扩展图形 16.6 小结第17章 连接图形 17.1 Visio中的图形和连接器 17.2 连接点、连接器工具和静态粘贴 17.2.1 使用静态...

    javascript 深拷贝

    我们先看一下浅复制的缺陷,不知多少人中过招呢? 代码如下: var oOriginal = { memNum: 1, // number memStr: “I am a string”, // string memObj: { test1: “Old value” // we’ll test }, memArr: [ // array...

    flash shiti

    13. 如果要让Flash 同时对若干个对象产生渐变动画,则必须将这些对象放置在不同的层中。 □ A. 正确 □ B. 错误 14. 矢量图形用来描述图像的是: □ A. 直线 □ B. 曲线 □ C. 色块 □ D. A 和B 都正确 15. 下列那几...

    C++MFC教程

    在Windows中有各种GUI对象(不要和C++对象混淆),当你在进行绘图就需要利用这些对象。而各种对象都拥有各种属性,下面分别讲述各种GUI对象和拥有的属性。 字体对象CFont用于输出文字时选用不同风格和大小的字体。可...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    其二、技术层次深:如果期望进入IT服务或者产品公司(类似毕博、DELL、IBM等),Oracle技术能够帮助提高就业的深度。 其三、职业方向多:Oracle数据库管理方向、Oracle开发及系统架构方向、Oracle数据建模数据仓库等...

    PaperTest Q&A笔试综述

    2)浅复制与深复制.…. 3)逆波兰表达式 4)C语言变长参数0 a品 27 5)调用约定… 27 6)寄存器 28 7)关于内联数 inline 28 8 PACK.... 28 9)正则表达式 29 内存操作… 29 11)四种强制类型转换 31 12 ...

Global site tag (gtag.js) - Google Analytics