跳转到内容

ActionScript 编程/第一部分/第 3 章/对象、作用域

来自 Wikibooks,开放书籍,开放世界

数据类型

[编辑 | 编辑源代码]

String.split (方法)

[编辑 | 编辑源代码]

String.split( <separator>, [limit] );

该函数通过在指定 <separator> 参数出现的地方将指定的字符串拆分为子字符串,并将子字符串返回到数组中。例如,您有一个用逗号分隔的值字符串。通过使用此方法,您可以将这些值分开并将其导入数组。此示例说明了如何执行此操作

1.   var tmpString = new String("Mario,Henry,George,Amy,Kate");
2.   var tmpValues = new Array();
3.   tmpValues = tmpString.split(",");
4.   trace(tmpValues[0]);
5.   trace(tmpValues[1]);
6.   trace(tmpValues[2]);
7.   trace(tmpValues[3]);
8.   trace(tmpValues[4]);

通过指定 [limit] 参数,您可以限制值的个数。例如,如果我们将 [limit] 参数设置为 2,则数组的长度将为 2,并且只有前两个值:“Mario” 和“Henry” 将被跟踪。

在 Macromedia Flash 中,几乎所有东西都是对象。例如,所有数据类型都是对象。现在让我们看看我们可以用对象做什么。首先,通过声明一个对象变量,我们可以将其分配给任何其他数据类型。示例

1.   var obj = new Object();
2.   var num1 = new Number(20);
3.   var num2 = new Number(30);
4.   var str1 = new String("50");
5.   var str2 = new String("70");
6.   trace("str1 + str2 = " + (str1 + str2));
7.   trace("num1 + num2 = " + (num1 + num2));
8.   obj = num1; //Now obj is number
9.   obj += num2;
10.  trace("obj = " + obj);
11.  obj = str1; //Now obj is string
12.  obj += str2;
13.  trace("obj = " + obj);

在第 1 行,我们声明了一个名为“obj”的对象变量。在第 2-3 行,我们声明了数字变量“num1”和“num2”,并相应地为它们分配了值 20 和 30。


//output  
// strTemp = ["this", "is", "a", "string", "to", "array", "test"]  
  
private function stringToArray($string:String):Array  
{  
    var a = $string.split(" ");  
    var temp = [];  
    for (var x = 0; x < a.length; x++) {  
        temp.push(a[x]);  
    }  
    return temp;  
}

变量的作用域

[编辑 | 编辑源代码]

在本章中,您学习了如何声明、初始化和使用变量,但我们没有讨论变量的限制。变量分为三类:全局变量、时间轴变量和局部变量。全局变量在整个影片中都可以访问,时间轴变量可以在任何时间轴上访问,而局部变量只能从声明它们的函数(函数就像事件,稍后您将学习它们)中访问。现在让我们更详细地了解每个组。

全局变量

[编辑 | 编辑源代码]

首先,让我们了解“全局变量在整个影片中都可以访问”这句话的含义。如您所知,Flash 文档包含场景,并且可能包含其他对象,如影片剪辑、按钮、图片等。通过声明全局变量,它可以在上述所有地方使用,简而言之,可以在影片(Flash 文档)的任何地方使用。为了演示,让我们执行以下操作:创建一个新的“影片剪辑”(为此,只需在场景中绘制一些内容,选择它,然后按“F8”。当“转换为符号”对话框出现时,输入“影片剪辑”的名称,选择“影片剪辑”作为行为,然后按“确定”)并确保将其添加到场景中(如果它没有添加,请按 F11 查看“库”窗口并将您的“影片剪辑”拖到场景中。然后打开场景第一帧的动作并编写以下代码

var MyVar = new String("Hello!!!");

现在双击您创建的“影片剪辑”,导航到它,打开其第一帧的动作,并编写以下内容

trace(MyVar);

现在播放影片。输出将是

此示例表明,在时间轴中声明的变量无法从“影片剪辑”等其他对象中访问。为避免这种情况,我们可以将变量声明为全局变量。声明全局变量就像声明普通变量一样,但有两点不同:1)在声明的开头不要写“var”;2)在变量名的开头添加“_global”文本。示例

_global.MyVar = new String("Hello!!!");

现在,如果您再次测试以下示例,但这次将“MyVar”变量声明为全局变量,它将正常工作。

时间轴变量

[编辑 | 编辑源代码]

这组变量在整个时间轴中都可以访问。这意味着,如果您在第 1 帧中声明了一个变量,则可以从所有其他帧和场景中访问它,简而言之,可以从时间轴的任何地方访问它。声明时间轴变量就像声明普通变量一样,只是在声明的开头要写“var”关键字。示例

MyVar = new String("Hello!!!");

局部变量

[编辑 | 编辑源代码]

这组变量只能从声明它们的函数(或代码块)中访问。您已经知道如何声明局部变量。示例

var MyVar = new String("Hello!!!");

为了理解“代码块”的含义,让我们执行以下操作:创建一个新的 Flash 文档,打开第一帧的动作并编写以下内容

var MyVar = new String("Hello!!!");

然后创建一个按钮(为此,只需绘制您的按钮,选择它,按 F8,当“转换为符号”对话框出现时,输入按钮的名称,选择“按钮”作为行为,然后按“确定”),打开其动作并编写以下内容

on (release) {
   trace(MyVar);
}

现在测试影片(提示:只需按“Ctrl+Enter”即可)。如果您现在按下按钮,输出将是:“Hello!!!”。发生了什么?“MyVar”不是局部变量吗?答案是肯定的,它是局部变量。它可以从按钮中访问的原因是它是在帧中声明的。在帧动作中编写任何内容都会使其成为“_root”对象的一部分,并且由于所有帧都是“_root”对象的一部分,因此它们可以“看到”彼此。这意味着,如果您在任何帧中声明了一个局部变量,那么它就会成为“_root”对象的局部变量,因此可以从任何帧(尤其是位于该帧上的按钮)访问它(位于时间轴上的所有对象都是“_root”对象的成员)。因此,所有这一切都意味着,在时间轴中声明的局部变量与时间轴变量相同。

« 上一步    下一步 »

华夏公益教科书