使用动作脚本 1 创建继承

注意:如果您从未使用动作脚本编写过面向对象的脚本,而且不需要以 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#endinitclipsuper