ActionScript 3.0 简介

关于 ActionScript

ActionScript 是 Adobe® Flash® Player 和 Adobe® AIR™ 运行时环境的编程语言。它在 Flash、Flex 和 AIR 内容和应用程序中实现交互性、数据处理以及其它许多功能。

ActionScript 在 ActionScript 虚拟机 (AVM) 中执行,后者包含在 Flash Player 和 AIR 中。ActionScript 代码通常由编译器转换为字节代码格式。字节代码是一种由计算机编写和识别的编程语言。编译器示例有:内置到 Adobe® Flash® Professional 中的编译器、内置到 Adobe® Flash® Builder™ 中的编译器,以及 Adobe® Flex™ SDK 中提供的编译器。字节代码嵌入在 Flash Player 和 AIR 执行的 SWF 文件中。

ActionScript 3.0 提供了可靠的编程模型,具备面向对象编程基本知识的开发人员都熟悉此模型。ActionScript 3.0 相对于早期 ActionScript 版本改进的一些重要功能包括:

  • 一个新增的 ActionScript 虚拟机,称为 AVM2,它使用全新的字节代码指令集,可使性能显著提高

  • 一个更为先进的编译器代码库,可执行比早期编译器版本更深入的优化

  • 一个扩展并改进的应用程序编程接口 (API),拥有对对象的低级控制和真正意义上的面向对象的模型

  • 一个基于 ECMAScript for XML (E4X) 规范(ECMA-357 第 2 版)的 XML API。E4X 是 ECMAScript 的一种语言扩展,它将 XML 添加为语言的本机数据类型。

  • 一个基于文档对象模型 (DOM) 第 3 级事件规范的事件模型

ActionScript 3.0 的优点

ActionScript 3.0 的脚本编写功能优于 ActionScript 的早期版本。它旨在方便创建拥有大型数据集和面向对象的可重用代码库的高度复杂应用程序。在 Flash Player 中运行的内容不要求使用 ActionScript 3.0。但是,拥有它可以得到只能通过 AVM2(ActionScript 3.0 虚拟机)实现的性能改善。与旧的 ActionScript 代码相比,ActionScript 3.0 代码的执行速度可以快 10 倍。

早期版本的 ActionScript 虚拟机 AVM1 执行 ActionScript 1.0 和 ActionScript 2.0 代码。Flash Player 9 和 10 支持 AVM1 以实现后向兼容性。

ActionScript 3.0 中的新增功能

ActionScript 3.0 包含许多类似于 ActionScript 1.0 和 2.0 的类和功能。但是,ActionScript 3.0 在架构和概念上与早期的 ActionScript 版本不同。ActionScript 3.0 中的改进包括新增的核心语言功能,以及能够更好地控制低级对象的改进 API。

核心语言功能

核心语言定义编程语言的基本构造块,例如语句、表达式、条件、循环和类型。ActionScript 3.0 包含许多加快开发过程的功能。

运行时异常

ActionScript 3.0 报告的错误情形比早期的 ActionScript 版本多。运行时异常用于常见的错误情形,可改善调试体验并使您能够开发可以可靠地处理错误的应用程序。运行时错误可提供带有源文件和行号信息注释的堆栈跟踪,以帮助您快速定位错误。

运行时类型

在 ActionScript 3.0 中,类型信息在运行时保留。这些信息用于执行运行时类型检查,以改善系统的类型安全性。类型信息还可用于以本机形式表示变量,这样提高了性能,减少了内存使用量。经过比较,在 ActionScript 2.0 中,类型批注主要是一个开发人员辅助手段,所有值都在运行时以动态方式键入。

密封类

ActionScript 3.0 中引入了密封类的概念。密封类只能拥有在编译时定义的一组固定的属性和方法;不能添加其它属性和方法。由于不能在运行时更改类,使得编译时检查更严格,从而开发的程序更可靠。由于不要求每个对象实例都有一个内部哈希表,因此还提高了内存的使用率。还可以通过使用 dynamic 关键字来实现动态类。默认情况下,ActionScript 3.0 中的所有类都是密封的,但可以使用 dynamic 关键字将其声明为动态类。

闭包方法

ActionScript 3.0 使闭包方法可以自动记起它的原始对象实例。此功能对于事件处理非常有用。在 ActionScript 2.0 中,闭包方法无法记起它是从哪个对象实例提取的,所以调用闭包方法时会导致意外的行为。

ECMAScript for XML (E4X)

ActionScript 3.0 实现了 ECMAScript for XML (E4X),后者最近被标准化为 ECMA-357。E4X 提供一组用于操作 XML 的自然流畅的语言构造。与传统的 XML 分析 API 不同,使用 E4X 的 XML 就像该语言的本机数据类型一样执行。E4X 通过大大减少所需代码的数量来简化操作 XML 的应用程序的开发。

若要查看 ECMA E4X 规范,请访问 www.ecma-international.org

正则表达式

ActionScript 3.0 包括对正则表达式的固有支持,因此您可以快速搜索并操作字符串。由于在 ECMAScript (ECMA-262) 第 3 版语言规范中对正则表达式进行了定义,因此 ActionScript 3.0 实现了对正则表达式的支持。

命名空间

命名空间与用于控制声明(publicprivateprotected)的可见性的传统访问说明符类似。它们的工作方式与名称由您指定的自定义访问说明符类似。命名空间使用统一资源标识符 (URI) 以避免冲突,而且在您使用 E4X 时还用于表示 XML 命名空间。

新基元类型

ActionScript 3.0 包含三种数值类型:Number、int 和 uint。Number 表示双精度浮点数。int 类型是一个带符号的 32 位整数,它使 ActionScript 代码可充分利用 CPU 的快速处理整数数学运算的能力。int 类型对使用整数的循环计数器和变量都非常有用。uint 类型是无符号的 32 位整数类型,可用于 RGB 颜色值、字节计数和其它方面。而 ActionScript 2.0 只包含 Number 一种数值类型。

API 功能

ActionScript 3.0 中的 API 包含许多可用于在低级别控制对象的类。语言体系结构的设计比早期版本更为直观。虽然有太多的类需要详细介绍,但是一些重要的区别更值得注意。

DOM3 事件模型

文档对象模型级别 3 事件模型 (DOM3) 提供了一种生成和处理事件消息的标准方式。这种事件模型的设计允许应用程序中的对象进行交互和通信、维持其状态以及响应更改。ActionScript 3.0 事件模型的模式遵守万维网联合会 DOM 级别 3 事件规范。这种模型提供的机制比早期版本的 ActionScript 中提供的时间系统更清楚、更有效。

事件和错误事件都位于 flash.events 包中。Flash Professional 组件和 Flex 框架使用的事件模型相同,因此整个 Flash 平台中的事件系统是统一的。

显示列表 API

用于访问显示列表(包含应用程序中所有可视元素的树)的 API 由使用可视基元的类组成。

Sprite 类是一个轻型构建基块,被设计为可视元素(如用户界面组件)的基类。Shape 类表示原始的矢量形状。可以使用 new 运算符很自然地实例化这些类,并可以随时动态重新指定其父类。

深度管理是自动进行的。提供了用于指定和管理对象的堆叠顺序的方法。

处理动态数据和内容

ActionScript 3.0 包含用于加载和处理 应用程序中的资源和数据的机制,这些机制在 API 中是直观的并且是一致的。Loader 类提供了一种加载 SWF 文件和图像资源的单一机制,并提供了一种访问已加载内容的详细信息的方式。URLLoader 类提供了一种单独的机制,用于在数据驱动的应用程序中加载文本和二进制数据。Socket 类提供了一种以任意格式从/向服务器套接字中读取/写入二进制数据的方式。

低级数据访问

多种 API 都提供对数据的低级访问。对于正在下载的数据而言,可使用 URLStream 类在下载数据的同时访问原始二进制数据。使用 ByteArray 类可优化二进制数据的读取、写入以及使用。使用 Sound API,可以通过 SoundChannel 类和 SoundMixer 类对声音进行精细控制。安全性 API 提供有关 SWF 文件或加载内容的安全权限的信息,使您能够更好地处理安全错误。

使用文本

ActionScript 3.0 包含一个用于所有与文本相关的 API 的 flash.text 包。TextLineMetrics 类为文本字段中的一行文本提供精确度量;该类取代了 ActionScript 2.0 中的 TextFormat.getTextExtent() 方法。TextField 类包含可以提供有关文本字段中一行文本或单个字符的特定信息的低级别方法。例如,getCharBoundaries() 方法返回一个表示字符边框的矩形。getCharIndexAtPoint() 方法返回位于指定点的字符的索引。getFirstCharInParagraph() 方法返回段落中第一个字符的索引。行级方法包括 getLineLength()(返回指定文本行中的字符数)和 getLineText()(返回指定行的文本)。Font 类提供了一种管理 SWF 文件中的嵌入字体的方法。

为了对文本进行更低级别的控制,flash.text.engine 包中的类组成了 Flash 文本引擎。这组类提供对文本的低级控制,是针对创建文本框架和组件而设计的。