4

我需要一点帮助来了解类在 Actionscript 3 中的工作方式。我了解您从“包”开始以及为什么然后导入任何必要的库,然后命名该类并说明它是公共/私有的并扩展任何内容。

在那之后是我不明白的。看来你写“(公共)函数类名()

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

我可能错过了一些较早的阅读,因为我已经阅读了一些内容,但似乎无法理解。

有人可以尝试向我解释吗?谢谢。

4

3 回答 3

12

ActionScript 3 类

package声明_

好的,首先就像您提到的那样,一个类必须由package1包装。这给了我们第一个块,您需要在其中定义类。

package
{
    // Your class here.
}

package语句反映了类相对于.fla2的位置。例如,如果您在与项目 .fla 相同的目录中有一个文件夹“classes”,那么该文件夹中的类将需要一个反映以下内容的包语句:

package classes
{
    // Your class here.
}


定义类

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

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

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

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

package classes
{
    public class Person
    {
        // Class qualities here.
    }
}


属性

类可以包含属性。属性是使用var关键字定义的。它们可能属于多个命名空间之一(包括您自己的),并用于保存属于您的类的值。最常见的属性是在类的顶部聚集在一起。

我们的班级Person可以享受以下属性:heightweight

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

可以通过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;
        }
    }
}


方法

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

我们可能希望能够轻松确定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);
        }
    }
}


实例

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

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

import classes.Person;

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

var marty:Person = new Person(71, 1.76);
var bruce:Person = new Person(96.4, 1.72);

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

trace(marty.getBMI()); // 22.9
trace(bruce.getBMI()); // 32.6

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

于 2012-07-22T22:45:55.380 回答
0

与类同名的函数是构造函数。花括号中基本上是在创建对象时将立即执行的代码的一部分。尝试搜索有关构造函数的信息,我认为它们存在于每种面向对象的编程语言中(我可能错了),所以你有很多资源。

您还可以在Wikipedia上阅读有关此概念的信息。

于 2012-07-22T22:07:35.870 回答
0

与类同名的函数是构造函数。它是可选的,因此如果您不需要它,可以将其省略。将添加一个默认构造函数,它基本上什么都不做。

构造函数允许您编写在创建类的实例后立即执行的代码(即当另一段代码运行时new ClassName()。您通常会使用它来初始化类使用的一些变量。定义构造函数还可以让您处理构造函数参数,其他代码在使用运算符时可以传递的参数new

于 2012-07-22T22:14:01.980 回答