基础很重要,以下内容都是参照prog_actionscript30.pdf,但不算翻译,adobe labs上有。
type checking
as3里有两种类型检测:编译时和运行时。as3是一种动态定义类型语言(Dynamically typed language),一般来说应该是运行时才会去检测类型正确性,但是在实际开发中,这种检测有时会降低开发效率,所以flash9提供了编译时检测的方式,在发布时选择strict mode
is 操作符
is是用来代替instanceof的,检测变量是否是某个类型,比如
var mySprite:Sprite = new Sprite();
trace(mySprite is Sprite) // true
trace(mySprite is IEventDispatcher) // true
is 可以检测到接口,而instanceof 不行,看来is更能体现继承结构
trace(mySprite instanceof IEventDispatcher) // false
as 操作符
as跟is的作用是一样的,区别是返回值不同,如果是true就返回类型值,false就返回null,比如:
trace(mySprite as DisplayObject) // [object sprite]
trace(mySprite as Number) // null
dynamic class
这真是一个很大的进步,除非使用dynamic关键字,as3的类都是静态的(sealed class),不能在类外动态定义变量方法,as2确能很自由。这样在运行时提高了很多效率
基本数据类型
这里有一点很重要,as3里基本类型也是对象(这跟java,C++不同,as3好像真的是完全的面向对象)。这样的写法是相同的:
var i:int = 3;
var i:int = new int(3);
这里值得注意一个技术细节,as3的基本类型是作为不变对象存在的(immutable object),如果你学过java,应该知道String就是这样一个特殊的对象。在内存中有这么一些区域来存放immutable object,他们是不可修改的(但是可以被垃圾回收),如果有两个引用是同一个值,比如var a:int = 3,var b:int = 3,他们实际上引用了同一个对象。但是如果修改它,比如a++,原来的3数值对象不会被修改(immutable的),但是会产生一个新对象4,被a引用,而3还是被b引用。这样,基本类型比复杂对象更能节省内存和提高效率。
- Boolean 默认值false
- int 默认值0,32位整数
- Number 默认值NaN,64位浮点数
- String 默认值null(字符串也算?)
- uint 默认值0,一般用在颜色值上