注意:如果您从未使用动作脚本编写过面向对象的脚本,而且不需要以 Flash Player 5 作为目标播放器,则不应使用本节中的信息,因为我们不鼓励使用动作脚本 1 来编写脚本;而应参见使用动作脚本 2.0 创建类以获得有关使用动作脚本 2.0 的信息。
继承是一种组织、扩展和重用功能的方式。子类会从超类继承属性和方法,并添加自己的专用属性和方法。例如,就现实世界而言,自行车是一个超类,而山地车和三轮车则是该超类的子类。这两个子类都包含,或者说是继承 了超类的方法和属性(例如 wheels
)。每个子类还具有它们自己的属性和方法,这些属性和方法扩展了超类(例如,MountainBike 子类具有 gears
属性)。在动作脚本中可以使用 prototype
和 __proto__
元素来创建继承。
所有的构造函数都有 prototype
属性,该属性是在定义该函数时自动创建的。prototype
属性表示用该函数创建的对象的默认属性值。可以使用 prototype
属性将属性和方法分配给类。(有关更多信息,请参见使用动作脚本 1 将方法分配给自定义对象。)
类的所有实例都具有 __proto__
属性,该属性会指出这些实例继承自哪个对象。在使用构造函数创建对象时,会将 __proto__
属性设置为引用其构造函数的 prototype
属性。
继承会按照明确的层级向下延伸。在调用对象的属性或方法时,动作脚本会查看该对象,确定是否存在这样一个元素。如果不存在,动作脚本会查看该对象的 __proto__
属性以获得信息 (myObject.__proto__
)。如果该属性不是该对象的 __proto__
对象的属性,动作脚本会查看 myObject.__proto__.__proto__
,依此类推。
下面的示例将定义构造函数 Bike()
:
function Bike (length, color) { this.length = length; this.color = color; }
下面的代码会将 roll()
方法添加到 Bike 类:
Bike.prototype.roll = function() {this._x = _x + 20;};
可以创建一个将 Bike 作为超类的 MountainBike 类,这样就不用再向 MountainBike 类和 Tricycle 类中添加 roll()
方法了:
MountainBike.prototype = new Bike();
现在,可以调用 MountainBike 的 roll()
方法,如下所示:
MountainBike.roll();
影片剪辑不会相互继承。若要在影片剪辑间创建继承,可以使用 Object.registerClass()
方法给影片剪辑分配一个除 MovieClip 之外的类。请参见 Object.registerClass()
。
有关继承的更多信息,请参见Object.__proto__
、#initclip
、#endinitclip
和 super
。