辅助功能*

 

ActionScript 3.0 概述


Gary Grossman

Gary Grossman

Adobe

Emmy Huang

Emmy Huang

Adobe

出版日期:
2006 年 6 月 27 日
用户级别:
全部

ActionScript 3.0 是一种功能强大的、面向对象的编程语言, 它意味着 Flash Player 运行时功能发展中的重要一步。 推动 ActionScript 3.0 的动机是创建一种适合快速构建 Rich Internet Application 的理想语言, Rich Internet Application 已成为 Web 体验的必要组成部分。

早期版本的 ActionScript 提供创建真正引人入胜的在线体验所需的强大功能和灵活性。 ActionScript 3.0 现在进一步改进了该语言, 提供极好的性能和轻松的开发以便利高度复杂的应用程序、大型数据集和面向对象的、可重用的代码库。 使用 ActionScript 3.0, 开发人员可以使用面向 Flash Player 的内容和应用程序获得出色的生产效率和性能。

ActionScript 3.0 基于 ECMAScript, ECMAScript 是用于脚本编写的国际标准编程语言。 ActionScript 3.0 符合 ECMAScript 语言规范第三版 (ECMA-262*)。 它还包含基于 ECMAScript 第 4 版上正在进行的工作的功能, 该功能出现在 ECMA 标准正文内。

ActionScript 是由构建到 Flash Player 中的 ActionScript 虚拟机 (AVM) 执行的。 AVM1 是用于执行原有 ActionScript 代码的虚拟机, 它增强了现在的 Flash Player 的功能, 并使范围广泛的交互媒体和 Rich Internet Application 成为可能。

但是, 开发人员已开始将 AVM1 推至其极限;他们的项目要求现在需要一个重大的突破。 ActionScript 3.0 引入了一种新的高度优化的 ActionScript 虚拟机, 称为 AVM2, 它显著超越了使用 AVM1 可能达到的性能。 结果, ActionScript 3.0 代码执行的速度最多可以比原有 ActionScript 代码快 10 倍。

新的 AVM2 虚拟机在 Flash Player 9 中提供, 并将成为将来 ActionScript 执行的主要虚拟机。 Flash Player 将继续支持较旧的 AVM1, 从而向后兼容现有和原有内容。

现在有无数产品可生成针对 Flash Player 运行时的内容和应用程序。 通常这些产品包含对 ActionScript 的支持以向它们的输出增加交互性和行为。 在 Adobe 产品系列中, 专业的设计人员和开发人员可能在多个工具和服务器 (如 Flash、Flex 和 Flash Media Server) 内使用 ActionScript, 从而为 Flash Player 创建内容和应用程序。 Flex 产品系列 (包括新的基于 Eclipse 的 Flex Builder 2 IDE) 将成为访问 ActionScript 3.0 的新功能的第一个产品系列。

ActionScript 3.0 的目标

我们过去希望 ActionScript 3.0 提供一种改进的、一致的编程模型;符合行业标准;且其性能比过去提供的性能高一个数量级。 尽管 ActionScript 3.0 代表运行时的新的编程模型, 但它是具有面向对象编程基本知识的开发人员所熟悉的一种编程语言。

ActionScript 3.0 设计用于解决下列目标:

  • 安全: 该语言支持类型安全, 因此开发人员可以编写清楚的、易于维护的代码。
  • 简单性: 该语言非常直观, 使开发人员能够不必不断地查阅参考手册就可以阅读和编写程序。
  • 性能: 该语言使开发人员能够编写执行起来很有效且响应快速的复杂程序。
  • 兼容性: 该语言提供一个简短的向后和向前兼容途径, 并与行业标准有显著的重叠。 ActionScript 3.0 是 ECMAScript 的俗称, 它使 ActionScript 2.0 的功能正式化, 增加了 ECMAScript for XML (E4X) 的功能, 并将该语言统一为一个协调的整体。

ActionScript 3.0 的功能

ActionScript 3.0 由两个部分组成: 核心语言和 Flash Player API。 核心语言定义编程语言的基本构建块, 如语句、表达式、条件、循环和类型。 Flash Player API 是由代表 Flash Player 特定功能并提供对 Flash Player 特定功能的访问的类组成的。

ActionScript 3.0 包含一个具有强大新功能的主机, 可以极大地加快开发过程的速度。 正则表达式支持使得可以对文本执行各种强大的操作。 ECMAScript for XML (E4X) 将 XML 转换成一种本地数据类型, 显著地简化了 XML 处理。 新的显示列表 API 使得处理可视对象更为直接和一致。 标准化的 DOM 事件模型加强了那些对象在运行时彼此谈话和响应的方式。 这些仅是 ActionScript 3.0 的许多新功能中的一些。

语言特点

ActionScript 3.0 使 ActionScript 2.0 的核心语言方面与 ECMAScript 标准兼容, 并引入了某些领域的新的或增强的功能。 所有这些功能在 ActionScript 3.0 语言参考* (在 Adobe 实验室上的测试版本中提供) 中会进行全面详细的讨论。

以下是某些新功能对开发人员的益处和用途的高层摘要。

运行时例外

在 ActionScript 2.0 中, 许多运行时错误会以一种温和且安静的方式失败。 这样确保了 Flash Player 不会显示某些莫名其秒的对话框, 在早期的 Web 浏览器中 JavaScript 会出现这种情况。 另一方面, 缺少错误报告使得调试 ActionScript 程序更具挑战性。

ActionScript 3.0 引入了常见错误情况的各种运行时例外, 改进了调试体验并使应用程序能够可靠地处理错误。 运行时错误可以提供使用源文件和行号信息进行批注的堆栈跟踪, 帮助快速找出错误。

运行时类型

在 ActionScript 2.0 中, 类型批注主要对开发人员有帮助;在运行时, 所有值被动态地键入。

在 ActionScript 3.0 中, 类型信息在运行时被保留并用作许多用途。 Flash Player 执行运行时类型检查, 提高了系统的类型安全。 类型信息也用于表示本地计算机演示中的变量, 提高了性能并减少了内存使用。

密封类

ActionScript 3.0 引入了密封类的概念。 密封类仅占用在编译时定义的固定属性和方法集;无法添加其他属性和方法。 这使得能够进行更加严格的编译时检查, 从而提供更加可靠的程序。 它还通过不为每个对象实例要求内部哈希表, 提高内存使用。 动态类也可能通过使用动态关键词得到。

方法关闭

在 ActionScript 3.0 的方法关闭结束语中, 事件处理被简化, 这提供了内置的事件委派。 在 ActionScript 2.0 中, 关闭不会记住它是从哪个对象实例提取的, 从而导致关闭被调用时的异常行为。 mx.utils.Delegate 类是一种流行的解决办法;若要使用它, 需要按如下方式编写代码:

myButton.addEventListener("click", Delegate.create(this, someMethod)); 
Delegate.create(this, someMethod)
		  

不再需要此类, 因为在 ActionScript 3.0 中, 当引用 someMethod 时, 将生成方法关闭。 该方法关闭将自动记住其原始对象实例。 现在, 只需写入:

myButton.addEventListener("click", someMethod);
          

ECMAScript for XML (E4X)

ActionScript 3.0 采用了 ECMAScript for XML (E4X) 的完全实现, E4X 最近被标准化为 ECMA-357。E4X 为处理 XML 提供了一种自然的、流利的语言构造集。 不同于传统的 XML 解析 API, E4X 使 XML 就像该语言的一种本地数据类型。 通过显著降低需要的代码数量, E4X 简化了处理 XML 的应用程序的开发。

阅读关于 E4X 规范的详细信息* (PDF, 1.8 MB)

正则表达式

ActionScript 3.0 包含对正则表达式的本地支持, 从而您可以快速搜索和处理字符串。 ActionScript 3.0 实施在 ECMAScript 语言规范 (ECMA-262) 中定义的正则表达式。

名称空间

名称空间是用于控制声明的可见性的一种创新的新机制。 与用于控制声明可见性的传统访问说明符 (public、private、protected) 相似, 名称空间实质上是可具有您选择的名称的自定义访问说明符。 例如, Flex framework 为其内部数据使用 mx_internal 名称空间。 名称空间配备了统一资源定位符 (URI) 以避免冲突, 同时也用于与 E4X 一起使用时表示 XML 名称空间。

新的基元类型

ActionScript 2.0 具有单一数字类型, Number, 一个双精度浮点数。 ActionScript 3.0 的一个欢迎附加是新的 int 类型, 一种 32 位签名整数, 使 ActionScript 代码可以利用 CPU 的快速整数数学功能。 int 类型非常适合循环计数器, 且几乎可以用于不需要小数点的任何位置。另一种新类型是 uint, 一种与 int相似的未签名 32 位整数类型。

Flash Player API 功能

Flash Player API 是将 Flash Player 的功能展示给 ActionScript 语言的一组类和函数。 此功能是在 ActionScript 核心语言与平台的剩余部分之间的一座桥。 它是 Flash 应用程序的许多可用功能的来源, 且对于核心语言是一个非常重要的补充。 尽管此处不便详细阐述 API, 但仍提供了一个对开发人员可用的一些新的、有趣的功能的简短列表:

DOM3 事件模型

该事件模型提供了生成和处理事件消息的一种标准方法, 从而应用程序内的对象可以交互和通信, 保持状态并对更改作出响应。 模仿 W3C DOM3 事件规范, 此模型提供了一种比先前版本的 ActionScript 中可用的事件系统更加清晰、更加有效的机制。 Flex 应用程序框架使用与 Flash Player API 相同的事件模型, 因此事件系统从上到下在该平台上都是统一的。

显示列表 API

显示列表 API 由用于处理 Flash 中的可视基元的一组翻新的类组成。

新的 Sprite 类是一种轻型的构建块, 与 MovieClip 相似, 但作为 UI 组件的基本类更加适合。 新的 Shape 类代表原始矢量图形。 这些类可以使用新的操作符自然地进行实例化, 并可以在任何时候动态地重定父级。

不再需要分配深度数字以显示列表对象。 深度管理现在是自动的, 并已内置到 Flash Player 中。 会提供新的方法用来指定和管理对象的 Z 顺序。

下一步工作

此 ActionScript 3.0 概述仅略述了在您学习关于 ActionScript 3.0 的更多内容时发现的一些激动人心的 API 和语言功能。 若要获得关于如何实施 ActionScript 中的编程概念的信息, 在 LiveDocs 上使用 ActionScript 3.0 进行编程* (或作为 PDF) 是一个很好的起点, 而 ActionScript 3.0 语言参考将是关于该核心语言和 Flash Player API 的完整信息的最可靠的来源。 另外, 如果您已熟悉 ActionScript 1.0 或 2.0, 请查看学习 ActionScript 3.0 的技巧*

Flash Player 团队为能够通过 Adobe 实验室 向社区提供该语言的预览、其新功能及改进的性能而感到非常兴奋。 您将能够研究 ActionScript 3.0 以查看我们将通过 Flex Builder 2、Flex framework、Flex Data Services 2 和 Flash Player 9 使该语言实现哪些功能。对于该平台的未来, 我们希望您像我们一样感到兴奋, 并希望您通过 Adobe 实验室向我们提供反馈。

关于作者

Gary Grossman 是一名在 Adobe 的 Flash Player 软件架构师。 Gary 在 1998 年加入了 Macromedia 的 Flash 团队, 并参与过 Flash 4 之后的所有 Flash 版本的从工程到管理的各种工作。 他非常乐意与像 Jonathan Gay (Flash 的最初发明者和作者) 这样的 Flash 杰出人物一起工作。 Gary 是 Flash 4、Flash 5 和 Flash MX 中 ActionScript 编程语言的主要开发人员。他不断地积极参与 ActionScript 编程语言的发展。 Gary 生活和工作都在美国加州的旧金山。

Emmy Huang 是 Flash Player 的高级产品经理。在一系列数字娱乐技术的工程设计和产品管理方面, 他具有丰富的经验, 曾就职的公司包括 Sony Pictures Digital、Liberate Technologies 和 Intel。在 UCLA 攻读 MBA 时, 她突然萌生了转入另一个行业的想法, 而最终她决定从事软件业, 因为这要比销售更有乐趣。