用对象组织数据

您可能已经习惯了放置在舞台上的对象。例如,舞台上可能有一个 MovieClip 对象,并且该对象内包含其它影片剪辑。在放置到舞台上时,文本字段、影片剪辑和按钮通常被称为对象。

在 ActionScript 中,对象是属性和方法的集合。每个对象都有其各自的名称,并且都是特定类的实例。内置对象来自在 ActionScript 中预定义的类。例如,内置的 Date 类可以提供用户的计算机上的系统时钟的信息。可以使用内置的 LoadVars 类将变量加载到 SWF 文件中。

还可以使用 ActionScript 创建对象和类。可以创建一个对象来保存数据的集合,例如一个人的姓名、地址和电话号码。可以创建一个对象来保存图像的颜色信息。用对象组织数据有助于更好地组织 Flash 文档。有关创建自定义类以保存方法和属性集合的一般信息,请参阅"编写自定义类文件"。有关内置类和自定义类的详细信息,请参阅"类"

在 ActionScript 中创建一个对象有多种方法。下一示例用两种不同的方法创建了简单对象,然后循环访问这些对象的内容。

在 Flash 中创建简单对象:

  1. 创建一个新的 Flash 文档,并将它保存为 simpleObjects.fla
  2. 在时间轴中选择第 1 帧,在"动作"面板中,键入下面的 ActionScript:
    // 第一种方法
    var firstObj:Object = new Object();
    firstObj.firstVar = "hello world";
    firstObj.secondVar = 28;
    firstObj.thirdVar = new Date(1980, 0, 1); // 1980 年 1 月 1 日
    

    此代码是创建简单对象的一种方法,它创建了一个新的对象实例并在该对象中定义了几个属性。

  3. 现在,在步骤 2 中输入的代码后面输入下面的 ActionScript:
    // 第二种方法
    var secondObj:Object = {firstVar:"hello world", secondVar:28, thirdVar:new Date(1980, 0, 1)};
    

    这是创建对象的另一种方法。两个对象是等效的。以上代码创建一个新的对象,并使用对象简化记号初始化了一些属性。

  4. 要循环访问前面的每一个对象并显示对象的内容,请将以下 ActionScript 添加到时间轴的第 1 帧上(在已经输入的代码之后):
    var i:String;
    for (i in secondObj) {
        trace(i + ": " + secondObj[i]);
    }
    
  5. 选择"控制">"测试影片","输出"面板中将出现以下文本:
    firstVar: hello world
    secondVar: 28
    thirdVar: Tue Jan 1 00:00:00 GMT-0800 1980
    

注意

变量不一定按照该顺序显示在"输出"面板中。在使用 for..in 循环时,无法保证返回顺序;播放器会按照无法预测的顺序返回对象的内容。

也可以使用数组来创建对象。可以不使用一系列变量(例如 firstname1firstname2firstname3)来表示变量的集合,而是用一个对象数组来表示同样的数据。下面将演示这一做法。

使用数组创建对象:

  1. 创建一个新的 Flash 文档,并将它保存为 arrayObject.fla
  2. 在时间轴中选择第 1 帧,在"动作"面板中,键入下面的 ActionScript:
    var usersArr:Array = new Array();
    usersArr.push({firstname:"George"});
    usersArr.push({firstname:"John"});
    usersArr.push({firstname:"Thomas"});
    

    将变量组织到数组和对象中的好处是,可以更方便地循环访问变量并查看值,如以下步骤中所示。

  3. 在步骤 2 中添加的 ActionScript 之后键入以下代码:
    var i:Number;
    for (i = 0; i < usersArr.length; i++) {
        trace(usersArr[i].firstname); // George, John, Thomas
    }
    
  4. 选择"控制">"测试影片","输出"面板中将出现以下文本:
    George
    John
    Thomas
    

下例介绍了循环访问对象的另一种方法。在此示例中,将创建一个对象并使用 for..in 循环对其执行循环,每个属性都出现在"输出"面板中:

var myObj:Object = {var1:"One", var2:"Two", var3:18, var4:1987};
var i:String;
for (i in myObj) {
    trace(i + ": " + myObj[i]);
}
//输出以下结果:
/*
    var1: One
    var2: Two
    var3: 18
    var4: 1987
*/

有关创建 for 循环的信息,请参阅"使用 for 循环"。有关 for...in 循环的信息,请参阅"使用 for..in 循环"。有关对象的详细信息,请参阅"类"