今天同事問我有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 暫時並不知道有什麼其他...