使用动作脚本 1 将方法分配给自定义对象

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

将方法分配给自定义对象:

  1. 定义构造函数 Circle(),如下所示。
    function Circle(radius) {
      this.radius = radius;
    }
    
  2. 定义 Circle 对象的 area() 方法。area() 方法用于计算圆的面积。可以使用函数文本定义 area() 方法,并将 area 属性分配给该圆的原型对象,如下所示:
    Circle.prototype.area = function () {
        return Math.PI * this.radius * this.radius;
    };
    
  3. 创建 Circle 对象的一个实例,如下所示:
    var myCircle = new Circle(4);
    
  4. 调用新创建的 myCircle 对象的 area() 方法,如下所示:
    var myCircleArea = myCircle.area();
    

    动作脚本将在 myCircle 对象中搜索 area() 方法。由于该对象没有 area() 方法,因此会在它的原型对象 Circle.prototype 中搜索 area() 方法。动作脚本会在找到该方法后调用它。