flash action 詳解(9)_Flash教程
教程Tag:暫無Tag,歡迎添加,賺取U幣!
推薦:flash action 詳解(8)第4章:函數---函數的基本概念終于寫完了數據類型和條件以及循環語句部分,現在可以講講函數了.函數是在程序中可以重復使用的代碼.你可以將需要處理的值或
同變量一樣, 函數也可以具有全局性. 只要在聲明時在前面給它加一個 _global 就可以了://計算矩形面積的全局函數
_global.areaOfBox = function (a, b) {
return a*b; //在這里返回結果
}
//測試函數
area = areaOfBox(3, 6);
trace("area=" area);
請注重: 在函數體中出現的要害字 this 代表的是調用函數的 MovieClip, 而不是函數體所在的 MovieClip. 這很輕易被忽略而產生不期望的結果. 假如要指定 this 所代表的對象就要用到 Function.call() 和 Function.apply() 方法. 在后面的 arguments 對象介紹中會講到.
函數參數的檢查
為了保證函數運行的正確性, 我們有時必須檢測用戶是否給了足夠的或是正確類型的參數. 下面是我對上面例子進行改動后的代碼:
//計算矩形面積的全局函數
_global.areaOfBox = function (a, b) {
//輸出兩個參數之和, 用于理解下面的 typeof 語句
trace("a b=" (a b));
//檢測參數是否足夠且類型正確
if(a==undefined || b==undefined || typeof(a b)!="number") {
trace("<參數錯誤>");
return 0; //返回 0 作為錯誤時的結果
}
return a*b; //在這里返回結果
}
//測試函數
trace("----下面是正確的參數----");
area = areaOfBox(3, 6);
trace("area=" area);
trace("----下面是錯誤的參數----");
//這里為了節省篇幅, 我在命令中直接調用函數, 而不是先將返回值賦給一個變量
//其實這才是我們常用的函數調用方法
trace("area=" areaOfBox(3, "6"));
trace("----下面是不足的參數----");
trace("area=" areaOfBox(3));
上例中我用 a==undefined 來判定 a 是否被賦值了(即是否已定義, 對于 undefined 數據類型的內容請參閱前一章的內容). 為了確保萬無一失, 我還用了 b==undefined 來保證 b 也已被賦值, 中間使用一個邏輯 "或" 運算符 || 來連接這兩個條件.
此外, 在這兩個條件后面我又通過 typeof(a b)!="number" 來確認參數類型是否正確(關于 typeof 要害字的信息請參考前一章). 這里我利用了 Actions cript 的一個特點: 數值與字符串相加的和會被優先做為字符串處理. 所以 a b 中只要有一個為字符串, 那么整個 a b 的返回值就是一個字符串, 在后面通過 typeof 來檢測的結果自然就不是我們所要的 "number". 通過 trace("a b=" (a b)); 輸出的結果可以看出這一點.
--------------------------------------------------------------------------------
在 Actions cript 中除了用戶定義的函數外, 還有預定義的內建函數. 對于不同的對象, 也有不同的函數(或者說是方法)可以調用. 下面是擁有最高優先級的系統內建函數列表:
函數 說明
Boolean 將所給參數值轉化為邏輯值(也叫做布爾值)
escape 將所給參數轉化為字符串并用 URL 格式編碼(所有非標準字符將被轉化為以 % 開頭的十六進制值)
eval 返回所給參數表示的對象, 參數可以是常量, 表達式, 屬性等(這在 DuplicateMovieClip 時經常用到)
getProperty 返回指定對象的指定屬性值
getTimer 返回從動畫開始運行到當前所經過的毫秒數
getVersion 返回 Flash 版本和操作系統信息
isFinite 返回所給參數是否是有窮的(邏輯型返回值)
//創建新對象
object_1 = new Object();
object_1.value = 0; //為對象加入 value 屬性并給予初值 0
object_2 = object_1; //由 object_1 復制出一個 object_2, 此時兩者的 value 屬性均為 0
//測試函數
areaOfBox.call(object_1, 3, 6);
trace("object_1.value=" object_1.value);
array_ab = [4, 5]; //創建參數數組
areaOfBox.apply(object_2, array_ab);
trace("object_2.value=" object_2.value);
為什么要通過 call 和 apply 來調用函數? 這樣不比前面的直接調用麻煩嗎?
的確, 這樣調用函數比較麻煩, 但你注重到了我使用的第一個參數沒有? 通過第一個參數可以指定在函數體中的 this 要害字代表什么對象, 這就是用 call 和 apply 的好處(關于對象和 this 的內容在后面章節中才會提到, 在這里暫且不提). 這個好處只有在實際的編程中你才能體會得到, 這里只是簡要介紹一下, 讓你有個基本的概念.
假如函數中沒有使用 this 要害字, 第一個參數要用 null 代替.
在本例中第一個返回值被放入 object_1 的 value 屬性中, 另一個會被放入 object_2 的 value 屬性中. 通過 call 和 apply 的第一個參數我們讓函數體中的 this 先后代表了 object_1 和 object_2 兩個對象. 第一個參數后面的實際參數的給予完全依照要調用函數的參數個數和類型確定.
至于 call 與 apply 的不同之處上面已經表示得很明白了: apply 的實際參數是通過數組傳遞的.
arguments 對象
arguments 對象
arguments 對象, 顧名思義就是參數對象, 它包含的是函數調用的參數. 作為一個數組對象, 它只有三個屬性:
屬性 描述
arguments.callee 正被調用的函數
arguments.caller 正在進行此調用的函數
arguments.length 傳遞給被調用函數的參數數目
分享:flash action 詳解(7)循環語句--for循環語句for對于for循環,我想大多數讀者都不會生疏.下面是一個求1到100的自然數之和的程序段.varsum=0;//下面是for循環for(v
相關Flash教程:
- 相關鏈接:
- 教程說明:
Flash教程-flash action 詳解(9)。