as3中通過ByteArray進行物件的深度拷貝

2021-08-31 20:22:01 字數 1870 閱讀 8605

今天同事問我有as3中物件深度拷貝的問題

原來還真是沒用過,今天google後自己總結下,便於大家參考

as3中通過bytearray可以進行物件的深度拷貝

import flash.utils.bytearray;

import flash.utils.getqualifiedclassname;

import flash.net.*;

import src.*;

function cloneobject(source:object) :*

有的人說用複製物件那一段不就可以了嗎,但是實際上行不通

對於陣列深度複製來說, 複製物件的後面4句**就足夠了

var a1:array=[1,2,3];

var a2:array =cloneobject(a1);

var a3:array = a1;

a1.push(」youmila」);

trace(」a1:」+a1+」a2:」+a2+」a3″+a3);

但是對於物件來說肯定不行

用列子測試下

src.youmila.as **:

package src

public function secondfunc():void

}}

yapollo.as **:

package 

public function secondfunc():void

}}

測試例項

var uml1:youmila = new youmila();

var uml2 = cloneobject(uml1);

trace(」型別」+getqualifiedclassname(uml2)); 

輸出結果:

youmila

型別object 

原來的物件型別丟失了,所以對於物件而言,四行不夠,必須

用registerclassalias來儲存類的別名,以用於丟失後恢復類的型別

測試例項

var uml1:youmila = new youmila();

var uml2 = cloneobject(uml1);

trace(」型別」+getqualifiedclassname(uml2));

var apollo:yapollo = new yapollo();

apollo.secondfunc();

var apollo2 = cloneobject(apollo);

trace(」第一次輸出複製物件的$_num值」+apollo2.$_num);

trace(」型別」+getqualifiedclassname(apollo2));

apollo2.secondfunc();

trace(」第二次輸出複製物件的$_num值」+apollo2.$_num);

輸出結果:

youmila

輸出類的結構src::youmila

類的名稱src

[class youmila]

youmila

型別src::youmila

yapollo

this a called function $_num::1

輸出類的結構yapollo

類的名稱yapollo

[class yapollo]

yapollo

第一次輸出複製物件的$_num值1

型別yapollo

this a called function $_num::2

第二次輸出複製物件的$_num值2 

as3中的容器

4種容器 array object vector dictionary 各自特點 array是索引陣列,雖然它也是動態類,可以等同於object來用,但是不建議這樣,因為沒有任何好處。除了鍵上的區別外,array還是善於隨機訪問的,但不知道object和dictionary和它在訪問速度上的區別有多...

as3中bitmapData中draw方法重新理解

flash.display.bitmapdata.draw source ibitmapdrawable,matrix matrix null,colortransform colortransform null,blendmode string null,cliprect rectangle nu...

AS3中XML刪除節點

e4x規範中定義有delete和deletebyindex方法用來刪除特定的xml節點,但是在當前版本的actionscript 3.0實現中,並沒有實現這兩個方法。在as3的help文件裡也沒有提及如何刪除乙個xml節點。其中乙個方法就是 delete onexmlnode 暫時並不知道有什麼其他...