语言概述

对象是 ActionScript 3.0 语言的核心 — 它们是 ActionScript 3.0 语言的基本构造块。您所声明的每个变量、所编写的每个函数以及所创建的每个类实例都是一个对象。可以将 ActionScript 3.0 程序视为一组执行任务、响应事件以及相互通信的对象。

熟悉 Java 或 C++ 中面向对象的编程 (OOP) 的程序员可能会将对象视为包含以下两类成员的模块:存储在成员变量或属性中的数据,以及可通过方法访问的行为。ActionScript 3.0 采用一种相似但稍有不同的方式定义对象。在 ActionScript 3.0 中,对象只是属性的集合。这些属性是一些容器,除了保存数据,还保存函数或其他对象。以这种方式附加到对象的函数称为方法。

尽管具有 Java 或 C++ 背景的程序员可能会觉得 ActionScript 3.0 中的定义有些奇怪,但实际上,用 ActionScript 3.0 类定义对象类型与在 Java 或 C++ 中定义类的方式非常相似。在讨论 ActionScript 对象模型和其他高级主题时,了解这两种对象定义之间的区别很重要,但在其他大多数情况下,术语 属性 表示类成员变量(与“方法”对应)。例如,《用于 Adobe Flash Platform 的 ActionScript 3.0 参考》使用术语 属性 表示变量或 getter-setter 属性。使用术语 方法 表示作为类的一部分的函数。

ActionScript 中的类与 Java 或 C++ 中的类之间有一个细小的差别,那就是 ActionScript 中的类不仅仅是抽象实体。ActionScript 类由存储类的属性和方法的 类对象 表示。这样便可以使用可能不为 Java 和 C++ 程序员所熟悉的方法,例如,在类或包的顶级包括语句或可执行代码。

ActionScript 类与 Java 或 C++ 类之间还有一个区别,那就是每个 ActionScript 类都有一个 原型对象 。在早期版本的 ActionScript 中,原型对象链接成 原型链 ,共同作为整个类继承层次的基础。但是,在 ActionScript 3.0 中,原型对象在继承系统中仅扮演很小的角色。但是,原型对象仍非常有用,如果您希望在类的所有实例中共享某个属性及其值,可以使用原型对象来代替静态属性和方法。

过去,高级 ActionScript 程序员可以用特殊的内置语言元素来直接操作原型链。现在,由于 ActionScript 语言为基于类的编程接口提供了更成熟的实现,因此其中的许多特殊语言元素(如 __proto__ __resolve )不再是该语言的一部分。而且,内部继承机制的优化预先排除了对继承机制的直接访问,从而大大改善了性能。