as 3的基本语法
浏览量:4097
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的引用行为是无孔不入的,自定义对象的子对象遭遇引用操作,特别是多层架构中,隐蔽的引用操作会带来意想不到的问题。