函數為物件

在 ActionScript 3.0 中,函數就是物件。當您建立函數時,所建立的物件不但能傳遞參數給另一個函數,而且有屬性和方法附加其上。

當做引數傳遞至另一個函數的函數是以傳址方式傳遞,而不是以傳值方式傳遞。當您傳遞函數做為引數時,僅使用識別名稱即可,而不需使用用來呼叫方法的括號運算子。例如,下列程式碼會將名為 clickListener() 的函數做為引數,傳遞至 addEventListener() 方法:

addEventListener(MouseEvent.CLICK, clickListener);

Array.sort() 方法也會定義接受函數的參數。如需用做 Array.sort() 函數之引數的自訂排序函數範例,請參閱排序陣列

雖然對剛使用 ActionScript 的程式設計人員來說可能會覺得有點奇怪,但函數可以具有屬性和方法,就像任何其它物件一樣。事實上,每一個函數都有名為 length 的唯讀屬性,其中儲存為函數定義的參數數目。這與 arguments.length 屬性不同,此屬性會報告傳遞給函數的引數數目。您還記得在 ActionScript 中,傳遞給函數的引數數目可以超過為該函數所定義的參數數目。下列範例只在標準模式中編譯,因為嚴謹模式要求傳遞的引數數目與定義的參數數目必須完全相符,此範例會顯示這兩個屬性之間的差異:

function traceLength(x:uint, y:uint):void
{
    trace("arguments received: " + arguments.length);
    trace("arguments expected: " + traceLength.length);
}

traceLength(3, 5, 7, 11);
/* 輸出:
arguments received: 4
arguments expected: 2 */

您可以在函數主體之外定義屬性,自行定義函數屬性。函數屬性可以做為準靜態屬性,讓您儲存與函數相關之變數的狀態。例如,您可能要追蹤呼叫特定函數的次數。如果是撰寫遊戲,而要追蹤使用者使用特定命令的次數,這種功能可能會很有用;不過您也可以使用靜態類別屬性來執行這項作業。下列程式碼會在函數宣告之外建立函數屬性,而且在每次呼叫函數時遞增屬性:

someFunction.counter = 0;

function someFunction():void
{
    someFunction.counter++;
}

someFunction();
someFunction();
trace(someFunction.counter); // 2

Flash CS3

 

有新的意見加入至這個頁面時,傳送電子郵件給我 | 意見報告

目前頁面: http://livedocs.adobe.com/flash/9.0_tw/main/00000056.html