AS3 数组的浅复制与深复制

1、如果数组中的元素全部是基元数据类型,复制没有浅复制和深复制的分别。

     当数组中元素是复杂数据类型,即引用类型时,那么复制就分为钱复制和深复制。


2、浅复制

实例

			var copy:Array=oroginal.slice();
			var copy:Array=oroginal.concat();

使用浅复制生成的数组,其个元素存放的只是引用。两个数组中相同位置的元素存放的引用指向同一个对象。那么,该对元素的操作,等于就是操作引用指向的对象。如果该对象的状态发生变化,那么也会影响到另一个数组中相应位置的元素。例如:

			array=["abc","def","haha","hua"];
			var oroginal:Array=[1,"hua",array];//array是个数组,即引用类型
			var copy:Array=oroginal.slice();
			//或var copy:Array=oroginal.concat();
			copy[2][1]="zhang";
			trace(oroginal);//1,hua,abc,zhang,haha,hua
			trace(copy);//1,hua,abc,zhang,haha,hua

可以看出,copy的改变会影响oroginal,这就是钱复制。


3、深复制 ByteArray

深复制生成的新数组,其所有元素都是真正的原数组元素的备份。

这时两个数组中相同位置的元素,存放着不同的引用,指向不同的对象。

深复制用到ByteArray类

			array=["abc","def","haha","hua"];
			var oroginal:Array=[1,"hua",array];
			var foo:ByteArray=new ByteArray();
			foo.writeObject(oroginal);
			foo.position=0;
			
			var copy:Array=foo.readObject() as Array;
			copy[2][1]="zhang";
			trace(oroginal);//1,hua,abc,def,haha,hua
			trace(copy);//1,hua,abc,zhang,haha,hua

可以看出,copy的改变不会影响oroginal,确确实实是真正的复制。

你可能感兴趣的:(Actionscript3.0)