注意:如果您从未使用动作脚本编写过面向对象的脚本,而且不需要以 Flash Player 5 作为目标播放器,则不应使用本节中的信息,因为我们不鼓励使用动作脚本 1 来编写脚本;而应参见使用动作脚本 2.0 创建类以获得有关使用动作脚本 2.0 的信息。
您可以在对象的构造函数中定义对象的方法。但是,我们不建议采用这种方式,因为每次使用构造函数时都要定义方法,如下例所示。在此示例中,将创建方法 area()
和 diameter()
:
function Circle(radius) { this.radius = radius; this.area = Math.PI * radius * radius; this.diameter = function() {return 2 * this.radius;} }
每个构造函数都有一个 prototype
属性,此属性是在定义该函数时自动创建的。prototype
属性表示用该函数创建的对象的默认属性值。对象的每个新实例都有一个 __proto__
属性,用于引用创建它的构造函数的 prototype
属性。因此,如果将方法分配给对象的 prototype
属性,则该对象的任何新创建的实例都可以使用这些方法。最好将方法分配给构造函数的 prototype
属性,因为它只存在于一个位置,并且由该对象(或类)的新实例引用。可以使用 prototype
和 __proto__
属性扩展对象,这样能够以面向对象的方式重用代码。(有关更多信息,请参见使用动作脚本 1 创建继承。)
下面的过程将显示如何将 area()
方法分配给自定义的 Circle 对象。
Circle()
,如下所示。
function Circle(radius) { this.radius = radius; }
area()
方法。area()
方法用于计算圆的面积。可以使用函数文本定义 area()
方法,并将 area
属性分配给该圆的原型对象,如下所示:
Circle.prototype.area = function () { return Math.PI * this.radius * this.radius; };
var myCircle = new Circle(4);
myCircle
对象的 area()
方法,如下所示:
var myCircleArea = myCircle.area();
动作脚本将在 myCircle
对象中搜索 area()
方法。由于该对象没有 area()
方法,因此会在它的原型对象 Circle.prototype
中搜索 area()
方法。动作脚本会在找到该方法后调用它。