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”物件的成員)。因此,所有這一切都意味著,在時間軸中宣告的區域性變數與時間軸變數相同。
