ActionScript 3.0简介

ActionScript 是一种运行在Flash player环境下的编程语言,它为Flash 影片和应用程序提供交互、数据操作等功能。Flash Player通过其虚拟机执行ActionScript,ActionScript代码通常通过编译器(Flash、Flex Builder、Flex SDK 或Flex Data Services中的)编译成二进制代码。编译好的代码内置于SWF 中,该代码有Flash Player的运行环境下被执行。

相对于AS2,ActionScript 3.0为哪些熟悉OOP编程的开发人员提供健壮的模式。

1 语法方面的增强和改动

  • 引入了package(包)和namespace(命名空间) 两个概念。其中package用来管理类定义,防止命名冲突,而namespace则用来控制程序属性方法的访问。
  • 新增内置类型int(32比特整数),uint(非负32比特整数),用来提速整数运算;
  • 新增 * 类型标识,用来标识类型不确定的变量,通常在运行时变量类型无法确定时使用。在AS2中这种情况下需要用Object赖作为类型表识;
  • 新增is和as两个运算符来进行类型检查。其中is代替AS2中的instanceof来查询类实例的继承关系,而as则是用来进行不抛错误的类型转换。
  • 新增in运算符来查询某实例的属性或其prototype中是否存在指定名称的属性。
  • 新增for each语句来循环操作Array及Object实例。
  • 新增const语句来声明常量。
  • 新增Bound Method概念。当一个对象的方法被付值给另外一个函数变量时,此函数变量指向的是一个Bound Method,以保证对象方法的作用域仍然维持在声明此方法的对象上。这相当于AS2中的 mx.util.Delegate 类,在AS3中这个功能完全内置在语言中,不需要额外写代码。
  • AS3的方法声明中允许为参数指定默认值(实现可选参数)。
  • AS3中方法如果声明返回值,则必须明确返回。
  • AS2中表示方法没有返回值的Void标识,在AS3中变更为void。

2.OOP方面的增强

通过类定义而生成的实例,在AS3中是属于Sealed类型,即其属性和方法无法在运行时修改。这部分属性在AS2中是通过类的prototype对象来存储,而在AS3中则通过被称为Trait的概念对象存储管理,无法通过程序控制。这种处理方式一方面减少了通过prototype继承链查找属性方法所耗费的时间(所有父类的实现方法和属性都会被直接复制到对应的子类的Trait 中),另一方面也减少了内存占用量,因为不用动态的给每一个实例创建hashtable来存储变量。如果仍然希望使用AS2中类实例在运行时的动态特性,可以将类声明为dynamic。

3.api方面的增强

  • 新增 Display API,使AS3可以控制包括 Shape, Image, TextField, Sprite, MovieClip, Video, SimpleButton, Loader在内的大部分DisplayList渲染单位。这其中 Sprite 类可以简单理解为没有时间轴的 MovieClip,适合用来作为组件等不需要时间轴功能的子类的基础。而新版的 MovieClip 也比AS2多了对于Scene(场景)和 Label(桢标签)的程序控制。另外,渲染单位的创建和销毁通过联合 new 操作符以及addChild/removeChild等方法实现,类似attachMovie的旧方法已被舍弃,同时以后也无须去处理深度值。
  • 新增 DOM Event API,所有 在DisplayList 上的渲染单位都支持全新的三段式事件播放机制, Stage为起点自上而下的播报事件到target对象(此过程称为Capture Phase),然后播报事件给 target 对象(此过程称为Target Phas),最后在自下而上的播报事件(此过程称为Bubbling Phase)。
  • 新增内置的 Regular Expressions (正则表达式)支持,使AS3能够高效地创建、比较和修改字符串,以及迅速地分析大量文本和数据以搜索、移除和替换文本模式。
  • 新增 ECMAScript for XML(E4X)支持。 E4X 是AS3中内置的XML处理语法。在AS3中XML成为内置类型,而之前的AS2版本 XML 的处理api转移到flash.xml.*包中,以保持向下兼容。
  • 新增Socket类,允许读取和写入二进制数据,使通过as来解析底层网络协议(比如 POP3, SMTP, IMAP, NNTP 等)成为可能,使 lash Player可以连接邮件服务器和新闻组。
  • 新增 Proxy 类来替代在AS2中的Object.__resolve功能。
    新增对于Reflect(反射)的支持,相关方法在 flash.util.* 包中。

发表评论