ActionScript 编程/第一部分/第 3 章/对象、作用域
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”对象的成员)。因此,所有这一切都意味着,在时间轴中声明的局部变量与时间轴变量相同。