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