as 3的基本語法
瀏覽量:4222
as3 的值和引用這兩者比較有關系的是“賦值”和“函數傳參”兩個行為,期間又需要分“基元類型”和“對象”來討論。
我們知道as語言中所有的數據類型都繼承自Object,包括基元數據類型,但是在值和引用操作時它們的確需要區別對待。
我們將基元數據類型稱為“非結構對象”,與之對應的其他Object稱為“結構對象”。
下面將進行幾種實驗,結論大概就是
1、 基元數據類型按照值操作,代表基元數據的非結構對象也是按照值操作的。
2、 結構對象一般按照“引用”操作,但需要注意交換賦值的情況
3、As3中的“引用”操作其實不是真正意義上的引用,只是類似于“指針”傳遞的一種偽“引用”。As3中所有操作底層意義都是值操作,只不過針對結構對象時是“指針”值的值操作。
4、As3中的函數傳參,對基元類型相當于新副本的值操作。對結構對象,相當于“指針”值新副本的值操作。
5、 必要的時候使用深層次拷貝操作,特別是在多層次框架結構中。
=================
基元類型(包括Boolean、Number、int、uint 和String)
賦值:按照值操作。
var a:int=3;
var b:int=a;
b=6;
trace(a,b);// 3 6 即b的改變不會帶來a的改變
函數傳參:按照值操作
var a:int=3;
function f1(b:int):void{
b=6;
}
f1(a);
trace(a);//3 即在函數內部生成了新副本,其變化不會帶來a的改變
與前面的賦值操作是等價一致的
=================
對象Object
賦值:按照引用操作
var a:Object={x:1,y:2};
var b:Object=a;
b.x=6;
trace(a.x);//6 即b的改變會帶來a的改變
—-下面模擬復雜對象賦值—
var c:Object={i:10,j:11}
var a:Object={x:1,y:c};
var d:Object=a.y;
var b:Object=a;
d.i=6;
trace(a.y.i);//6
trace(b.y.i);//6 這里需要格外注意,as3的引用行為是無孔不入的,自定義對象的子對象遭遇引用操作,特別是多層架構中,隱蔽的引用操作會帶來意想不到的問題。