跳轉到內容

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

« 上一步    下一步 »

華夏公益教科書