基本上大家都知道有傳址與傳值兩種將引數傳入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