快速連結

2010年10月8日

陣列與物件陣列與複製陣列

要來講解有關於AS3的陣列問題!

基本上大家都知道有傳址傳值兩種將引數傳入Function的方法,基本概念就不多贅述了,隨便辜狗(?)一下就可以找得到相關文章。

Array不分傳值或傳址,它記錄的就是位址,所以不會有究竟是傳值還是傳址的問題,那在AS3中,若在Array內放置Object等物件時,物件改變會不會連帶改變Array內的值?

以下簡單的程式碼就來探討(?)這個問題──




//先宣告變數,兩個Object物件、兩個Array
var o1:Object=["123","456"];
var o2:Object=new Object();
var a:Array = [o1,o2];
var b:Array = a;


//改變物件o2的name
o2.name = "abc";

trace("物件陣列A=",a);
trace("等於A的陣列B=",b);
trace("陣列A的o2的name =",a[1].name);
trace("陣列B的o2的name =",b[1].name);

o2.name = "AAA";

trace("陣列A的改變name後o2的name =",a[1].name);
trace("陣列B的o2的name =",b[1].name);

a[1].name = "BEAR";

trace("陣列A中改變name後元素1的name =",a[1].name);
trace("陣列B的o2的name =",b[1].name);
trace("現在o2的name =",o2.name);

//改變物件o1的值
o1 = ["999","666"];

trace("改變o1後的陣列A=",a);
trace("等於A的陣列B=",b);

//改變陣列a中元素0的值
a[0] = "999999";

trace("改變元素0的陣列A=",a);
trace("等於A的陣列B=",b);

a = [o1,o2];

trace("改變所有元素的陣列A=",a);
trace("等於A的陣列B=",b);

//改變陣列b中元素1的值
b[1] = "zzz";

trace("陣列A=",a);
trace("改變元素1的陣列B=",b);


============================執行結果===============================
物件陣列A= 123,456,[object Object]
等於A的陣列B= 123,456,[object Object]
陣列A的o2的name = abc
陣列B的o2的name = abc
陣列A的改變name後o2的name = AAA
陣列B的o2的name = AAA
陣列A中改變name後元素1的name = BEAR
陣列B的o2的name = BEAR
現在o2的name = BEAR
改變o1後的陣列A= 123,456,[object Object]
等於A的陣列B= 123,456,[object Object]
改變元素0的陣列A= 999999,[object Object]
等於A的陣列B= 999999,[object Object]
改變所有元素的陣列A= 999,666,[object Object]
等於A的陣列B= 999999,[object Object]
陣列A= 999,666,[object Object]
改變元素1的陣列B= 999999,zzz

沒有留言:

張貼留言

歡迎大家留言提問,我會答的都會盡力回答!
如果太久沒出現回應就是我又忘記回來看留言了TAT