[AS3]AS3下对数组操作复制
[AS3]AS3下对数组操作复制
- import flash.utils.ByteArray;
- var a:Array=["a","b"];
- var b:Array=[];
- b=clone(a);
- trace(b);
- function clone(source:Object):*
- {
- var myBA:ByteArray = new ByteArray();
- myBA.writeObject(source);
- myBA.position = 0;
- return(myBA.readObject());
- }
如果数组中的元素全部是基元数据类型,复制没有浅复制和深复制的分别。
当数组中元素是复杂数据类型,即引用类型时,那么复制就分为浅复制和深复制。
浅复制
arr.slice();
arr.concat();
//使用浅复制生成的数组,其个元素存放的只是引用。
//两个数组中相同位置的元素存放的引用指向同一个对象。
//那么,该对元素的操作,等于就是操作引用指向的对象。
//如果该对象的状态发生变化,那么也会影响到另一个数组中相应位置的元素
var arr:Array = [1,5,3,9,[5,1]];
var copy:Array = arr.slice();
trace(copy);//1,5,3,9,5,1
copy[4][0] = 9
trace(arr)//1,5,3,9,9,1
trace(copy)//1,5,3,9,9,1
=====================
var arr:Array = [1,5,3,9];
var copy:Array = arr.slice();
trace(copy);//1,5,3,9
copy[3] = 5
trace(arr)//1,5,3,9
trace(copy)//1,5,3,5
深复制 ByteArray
深复制生成的新数组,其所有元素都是真正的原数组元素的备份。
这时两个数组中相同位置的元素,存放着不同的引用,指向不同的对象。
深复制用到ByteArray类
var _arr:Array = [1,2,3,[4,5]];
var copy:Array;
var bty:ByteArray=new ByteArray();
bty.writeObject(_arr);
bty.position=0;
copy=bty.readObject();
trace(copy);//1,2,3,4,5
copy[3][1] = 6;
trace(copy);//1,2,3,4,6
trace(_arr)//1,2,3,4,5
热门文章推荐
- [HLS]做自己的m3u8点播系统使用HTTP Live Streaming(HLS技术)
- [FMS]FMS流媒体服务器配置与使用相关的介绍
- [AS3]什么是M3U8,与HTML5的区别是什么
- AS2.0 让flash自适应全屏,并且不自动缩放
- [AS3]as3.0的sound类常用技巧整理
- [AS3]as3与ByteArray详解、ByteArray介绍、ByteArray用法
- 关于RTMP,RTMPT,RTMPS,RTMPE,RTMPTE协议的介绍
- [JS]分享浏览器弹出窗口不被拦截JS示例