Flex3教程 AS2轉(zhuǎn)化成AS3的方法
本文和大家重點討論一下Flex3教程中AS2轉(zhuǎn)化成AS3的方法(Method),AS3的方法修飾符在AS2的基礎(chǔ)上增加了protected,internal,final和override,并且private的語義有變化。無返回的關(guān)鍵字Void變成了void。方法參數(shù)的設(shè)定也有一些變化。
Flex3教程 AS2轉(zhuǎn)化成AS3的方法(Method)
AS2和AS3差異點介紹:
AS3的方法修飾符在AS2的基礎(chǔ)上增加了protected,internal,final和override,并且private的語義有變化。無返回的關(guān)鍵字Void變成了void。方法參數(shù)的設(shè)定也有一些變化。
private關(guān)鍵字修飾后代表此方法只能被本類訪問。這變得和Java語言一樣了。而在AS2中,private相當(dāng)于下面要說的AS3的protected。
protected關(guān)鍵字修飾后代表此方法只能被自己和自己的子類訪問,這和Java語言的protected關(guān)鍵字意義一樣,學(xué)過Java的朋友應(yīng)該很熟悉。
internal關(guān)鍵字修飾后代表此方法只能被同一包里的類訪問,這和Java語言的缺省方法權(quán)限也一樣。
final關(guān)鍵字修飾后代表此方法不能被覆蓋。同樣,和Java語言也是一樣的。
Flex3教程中override關(guān)鍵字修飾那些覆蓋父類方法的方法,C#程序員可能非常熟悉這個關(guān)鍵字,但是Java程序員可能有些不太理解,覆蓋……還需要關(guān)鍵字?我這里講一個我以前在Java&AS2時代遇到的麻煩,有一次,我寫一個Text組件,繼承自JSDK的JTextComponent類,我這個組件功能比較多,因此方法也比較多,其中有一個方法名叫updateText(具體名字我忘記了,這里隨便用一個)。這個組件雖然功能多,但是都很簡單,邏輯也很清晰,但是始終會發(fā)生很奇怪的錯誤,反復(fù)檢查了三千七百八十六遍代碼,還是找不到錯誤。***你猜錯誤在什么地方?就在updateText這里,原來JTextComponent也有這個方法,我又寫了同名的這個方法,因此就錯誤地覆蓋了JTextComponent的那個方法,當(dāng)然,不能正常工作了。你想想,要是覆蓋的方法都必須加上override關(guān)鍵字才能編譯通過,那么我在編譯的時候就會知道這里不該用這個名字了,也就不會浪費那么多時間了。簡單總結(jié)就是:override必須出現(xiàn)在覆蓋父類方法的方法前面,以避免無意的錯誤覆蓋。
◆override必須出現(xiàn)在protected,internal,public的前面。按照邏輯,你可以分析知道override不能出現(xiàn)在private和final的前面。
Void變成了void,這個只是字符變了,語義沒有變,查找替換即可。
Flex3教程中參數(shù)設(shè)置方面,變化的主要有:
參數(shù)數(shù)量嚴(yán)格檢查,在AS2中,方法申明中如果有n(n>=0)個參數(shù),在調(diào)用的時候,可以傳x(x>=0)個參數(shù),當(dāng)xn的時候,多于的參數(shù)則被忽略,也就是說,傳入的參數(shù)個數(shù)可以不跟申明的個數(shù)一致。而在AS3中,則必須一致。
參數(shù)缺省值設(shè)定,在AS3中可以有這種用法,申明functionmethod(x:int=1,y:int=2),調(diào)用時method()代表method(1,2),method(x)代表method(x,2)。這和C++語言是一樣的,熟悉C++的朋友可以跳過這一段了。也就說,缺省參數(shù)可以讓調(diào)用的時候少傳入一些參數(shù),沒有傳入的參數(shù)被缺省值代替。注意缺省參數(shù)必須是從后往左連續(xù)的,也就是說所有的缺省參數(shù)必須在必備參數(shù)的后面。這樣的用法method(param1:int,param2:String=””,param3:Number=6)可以,而method(param1:int=1,param2:String=””,param3:Number)不可以。
任意數(shù)量參數(shù),為了實現(xiàn)任意數(shù)量參數(shù)的方法,AS3增加了一種模式,method(…args)模式,
…args(args可以是任意合法變量名)代表一個數(shù)組,你可以通過遍歷數(shù)組的方式得到args內(nèi)所有參數(shù)。注意…args必須是***一個參數(shù),即是說method(param:int,…args)合法,而method(…args,param:int)不合法。使用例子:
- package{
- importflash.display.MovieClip;
- publicclassRestParamExampleextendsMovieClip{
- publicfunctionRestParamExample(){
- traceParams(100,130,"two");//Output:100,130,two
- trace(average(4,7,13));//Output:8
- }
- }
- }
- functiontraceParams(...rest){
- trace(rest);
- }
- functionaverage(...args):Number{
- varsum:Number=0;
- for(vari:uint=0;i<args.length;i++){
- sum+=args[i];
- }
- return(sum/args.length);
- }
【編輯推薦】