一、 包与类
AS3中也有很多很多类,同样是使用包来管理。
在包里面放的并不全是 类, 也可以是 函数
AS3中,有些类和函数 并不在包里卖弄,这些 类和函数 被称为 顶级类和顶级函数
顶级:是指可以在任何位置使用的这些类和函数
一个小例子
var isFull:Boolean; stage.addEventListener("click",onFull); function onFull(e:MouseEvent) { isFull = !isFull; if(isFull) { stage.displayState = "fullScreen"; }else { stage.displayState = "normal"; } }
new运算符
var obj:Object; obj = new Object(); obj.name = "anders"; obj.age = 23; trace(obj); trace(obj.name); trace(obj.age);
数组;
//创建数组 var arr:Array = new Array(); //保存一个数字 arr[0] = 12; //保存字符串 arr[1] = "helloo"; //保存boolean arr[2] = true; //保存一个MovieClip实例 arr[3] = new MovieClip(); trace(arr[0]); trace(arr[1]); trace(arr[2]); trace(arr[3]);
12
hello
true
Objct
二、使用显示类
1 创建MovieClip类的实例
//创建MovieClip实例 var mc:MovieClip = new MovieClip(); //填充样式 mc.graphics.beginFill(0xFF9900,100); //绘制矩形 mc.graphics.drawRect(0,0,100,200); //添加到显示列表 addChild(mc);
在AS3中,所哟类都属于CLass类型,例如 Movieclip就是一个Class
eg
//动态得到类的构造函数 var classContructor:Class = MovieClip; //创建相关类的实例 var mc:MovieClip = new classContructor(); mc.graphics.beginFill(0xFF9900,100); mc.graphics.drawRect(0,0,100,100); addChild(mc);
mc.addEventListener("click",onClick); function onClick(e:MouseEvent):void { mc.x = mc.x + 5; }
三、静态方法和静态属性
曾使用了很多Movieclip类的属性,这些属性都是通过影片剪切实例 或者额影片剪辑实例的实例名来访问的,这样的属性称为 实例属性。
还有一种属性,即 类属性 或 静态属性 这种属性只能通过类名来访问,不能通过实例来访问
1 Math类
Math类的属性,都属于类属性,只能通过类名来访问,
eg
Math.PI 就是 数学的 圆周率
2 事件类的 常量属性
例如AS3中的MouseEvent类,有很多属性,用来代表字符串常数
CLICK 表示字符串click 点击事件
DOUBLE_CLICK 表示字符串 doucleclick 双击事件
等等
所以上面的一段代码可以改写为:
stage.addEventListener(MouseEvent.CLICK,onClick); function onClick(e:MouseEvent):void { mc.x = mc.x + 5; }
String 类有个方法叫做frommCharCode() 它只属于类,只能通过类来使用,而String类的slice()方法属于实例,只能通过实例来使用。
四、垃圾回收
在flash中被称为垃圾回收机制,即用来自动清除内存中不需要的变量。
1 delete与静态类
在AS3中,delete发生了很大的变化,它不能杀出使用var定义的变量
var s:Number = 4; delete s;
但是delete只能删除动态创建的变量
如前面提到的MovieClip Object Array类
//创建实例 var mc:MovieClip = new MovieClip(); //动态添加属性speed mc.speed = 3; //输出 trace(mc.speed); //删除动态属性 delete mc.speed; //再输出 trace(mc.speed);
3 undefined
对于数组:
delete只能删除数组的元素,不饿能删除索引
//创建数组 var arr:Array = new Array(); //动态创建数组元素属性 arr[0] = 1; arr[1] = "hello"; //输出 数组长度 trace(arr.length); delete arr[1]; trace(arr[1]); //输出 数组长度 trace(arr.length);
2 undefined 2
delete 只能删除数组的元素,不能删除索引。所以长度没变化
如果要真删除数组中的元素,要使用splice方法
五 类型检测与转换
1 typeof函数
AS3中有很多可以检测变量的方法,例如typeof函数返回代表数据类型的字符串
var number:Number = 3; trace(typeof(number)); var str:String = "hello"; trace(typeof(str)); var uint_var:uint = 3; trace(typeof(uint_var)); var obj:Object = new Object(); trace(typeof(obj)); var any:* = new Object(); trace(typeof(any));
number string number object object
如果要检测变量的准确数据类型,可以使用is运算符,is用来判断实例是否属于某类型,也可以判断类的继承关系,包括对于借口的继承执行。返回值为true false
var mc:MovieClip = new MovieClip(); trace(mc is MovieClip); trace(mc is Sprite); trace(mc is DisplayObject); trace(mc is Stage);
true true true false
3 类型转换函数与as运算符
在复杂类型的变量之间赋值时,子类给直接或间接的父类赋值,会自动进行类型转换。
强制类型转换与as
var mc1:MovieClip = new MovieClip(); var mc2:Sprite = new MovieClip(); mc1 = MovieClip(mc2); mc1 = mc1 as MovieClip;
区别:
as如果转换不成功会返回一null。
而强转不成功的话flash会报错