Actionscript 3类的工作原理

use*_*257 4 class actionscript-3

我需要一点帮助来理解类在ActionScript 3中是如何工作的.我理解你从"package"开始,为什么然后去导入任何必要的库,然后命名类并声明它是公共/私有还是扩展了什么.

之后是我不明白的.看来你写的是"(公共)函数类名()

我不明白你为什么这样做以及大括号中的内容.

我可能已经错过了一些早期的阅读,因为我做了一点阅读,但我似乎无法得到它.

有人可以尝试向我解释一下吗?谢谢.

Mar*_*rty 12

ActionScript 3类

package声明.

好的,首先就像你提到的那样,一个类必须用package1包裹.这为我们提供了第一个块,您需要在其中定义类.

package
{
    // Your class here.
}
Run Code Online (Sandbox Code Playgroud)

package陈述反映了该班级相对于.fla2的位置.例如,如果在项目.fla所在的目录中有一个文件夹"classes",那么该文件夹中的类将需要一个反映出:

package classes
{
    // Your class here.
}
Run Code Online (Sandbox Code Playgroud)


定义班级.

在包语句中,您可以插入一个类.不要将它与包本身混淆,包本身可以包含许多类 - 每个类只需要拥有自己的文件和相同的包语句.

类定义由最多5个部分组成:

  1. 命名空间.一个班级可以是internalpublic.一个internal类只能被同一个包中的类可以看到,而public类可以从任何地方的项目中可以看出.
  2. 班级名称.
  3. 基类(可选).如果定义了基类,那么新类将充当该类的扩展,继承基类的所有特性.
  4. 实现的接口(可选).接口是一个高级主题,因此我建议您暂时忘记这些,直到您的AS3和OOP发展为止.

如果你想在包中创建一个名为"Person"的类classes,那么我们最终会得到:

package classes
{
    public class Person
    {
        // Class qualities here.
    }
}
Run Code Online (Sandbox Code Playgroud)


属性.

类可以包含属性.使用var关键字定义属性.它们可能属于许多名称空间(包括您自己的名称空间)之一,用于保存属于您的类的值.最常见的属性集中在类的顶部.

我们的Person类可以享受的属性heightweight:

package classes
{
    public class Person
    {
        // Properties.
        public var height:Number = 1.70;
        public var weight:Number = 67.5;
    }
}
Run Code Online (Sandbox Code Playgroud)

可以通过Person您创建的任何实例访问这些属性.每个实例都有自己的一组这些属性.


类构造函数(我相信这就是你所要求的).

构造函数用于保存在创建类的实例后应立即运行的逻辑.类构造函数与类本身具有相同的名称.它必须是public,它不会返回任何东西.构造函数可以接受参数,这些参数通常用于传递对该类或所需值的依赖项的引用.

package classes
{
    public class Person
    {
        // Properties.
        public var height:Number = 1.70;
        public var weight:Number = 67.5;

        // Constructor.
        public function Person(height:Number, weight:Number)
        {
            this.height = height;
            this.weight = weight;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


方法.

方法用于保存在调用该方法时可以运行的逻辑.方法通常返回值并可以接受参数.方法可以属于您期望属性可以属于的任何命名空间.

我们可能希望能够轻松确定Person我们创建的每个实例的BMI ,因此我们应该为此创建一个方法:

package classes
{
    public class Person
    {
        // Properties.
        public var height:Number = 170;
        public var weight:Number = 65.5;

        // Constructor.
        public function Person(height:Number, weight:Number)
        {
            this.height = height;
            this.weight = weight;
        }

        // Determine my BMI and return the result.
        public function getBMI():Number
        {
            return weight / (height * height);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


实例.

现在我们已经定义了新类,我们可以使用new关键字创建此类的实例.这可以从可以访问Person类的任何地方完成,在这种情况下,这是在项目的任何地方,因为我们已经创建了类public.

虽然类是public,但是从它所属的包之外的任何地方访问它都需要使用import语句.此语句需要在属于不同包的任何类中使用.该import语句遵循与之相同的名称,package并包括要包含在最后的类的名称:

import classes.Person;
Run Code Online (Sandbox Code Playgroud)

导入后Person,可以创建它的实例并将它们分配给具有不同heightweight值的变量:

var marty:Person = new Person(71, 1.76);
var bruce:Person = new Person(96.4, 1.72);
Run Code Online (Sandbox Code Playgroud)

然后我们可以使用他们的getBMI()方法获得每个人的BMI :

trace(marty.getBMI()); // 22.9
trace(bruce.getBMI()); // 32.6
Run Code Online (Sandbox Code Playgroud)

1可以将类放在可以在同一.as文件中引用的包之外.
2您可以添加更多源路径,并且包可以相对于此.