<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    ActionScript語言函數重載

    關鍵字: ? ????

    ActionScript與JavaScript類似,都是符合ECMAScript語言規范的語言。ActionScript 3.0更是向面向對象語言靠近了一大步。相對而言,JavaScript則在停留在基于對象的層次上(曾經看到一份資料,說Firefox對JavaScript的支持有一個時間表,大概到07年春季就能支持JavaScript2.0,目前也就是1.5左右)。

    拋開ActionScript與JavaScript的版本不談,讓我們探討一些以下幾個問題:
    1.ActionScript 3.0 是面向對象的嗎?
    2.ActionScript 3.0 為什么不支持函數重載

    首先,官方對ActionScript3.0的描述如下:
    ActionScript 3.0 offers a robust programming model that will be familiar to developers with a basic knowledge of object-oriented programming.

    Because of ActionScript's roots as a scripting language, ActionScript 3.0 OOP support is optional. This affords programmers flexibility in choosing the best approach for projects of varying scope and complexity. For small tasks, you may find that using ActionScript with a procedural programming paradigm is all you need. For larger projects, applying OOP principles can make your code easier to understand, maintain, and extend.

    從上述敘述來看,ActionScript的確是支持面向對象語言的,但它不是作為一個面向對象語言來設計的。它源自腳本語言,并支持對象的概念。引入面向對象機制是為了克服腳本語言面對大型軟件開發的重用、維護及擴展的難題。實際上,脫離應用和歷史,談論某種語言的面向對象機制的純粹性毫無意義可言(就像論壇經常就C++或Java孰優孰劣論戰一樣毫無意義)。

    其次,ActionScript語言為什么不支持函數重載。

    照我的理解,函數重載(Function Override)從來不是面向對象語言的核心。因此,ActionScript語言是否支持函數重載不應該成為人們批評或質疑它的原因之一,是否實現函數重載完全取決于你的應用。

    曾經遇到一個問題,Java語言的某個類接口要映射要ActionScript類,由于該類的接口有函數重載的現象,導致ActionScript無法聲明相應的接口。例如:
    //Java類
    interface PetStoreFacade{
    Account getAccount(String username);
    Account getAccount(String username, String password);
    //...
    }

    //ActionScript類
    interface PetStoreFacade{
    function getAccount(username:String):Account;
    function getAccount(username:String, password:String):Account;//ERROR,ActionScript不支持
    }

    從此例,大家可以看出,討論ActionScript是否支持函數重載的來源了(這大概是其中之一,即與支持函數重載的語言配合工作,或者要從支持函數重載的語言遷移到ActionScript就可能會遇到函數重載的問題)。

    關于ActionScript支持函數重載的文章很多,通過ActionScript提供的語言機制和變通的手法,可以讓ActionScript支持函數重載。示例如下:

    class PetStoreFacadeImpl{
    function getAccount(obj:*):Account{
    if(arguments.length==1){
    if(arguments[0] typeof 'String'){
    //do getAccount(username:String)
    }
    }
    else if(arguments.length==2){
    if(arguments[0] typeof 'String' && arguments[1] typeof 'String'){
    //do getAccount(username:String,password:String)
    }
    }
    }
    }

    通過arguments的判斷比較,實現了函數重載,只需調用時傳入合適的參數即可。不過我們仍然要問,為什么ActionScript不能直接支持函數重載。語言內部的實現機制是怎么樣的?仔細查閱了一些資料之后,發現這個問題其實很簡單。原來,這跟ActionScript語言的內部設計實現有關。我們給出幾個重要的概念,有助于理解上述問題。

    (一)函數也是對象
    ActionScript語言所謂的函數實際上也是對象(即Function),而且函數也是對象。函數可以依附于任何對象,它是自由的。而面向對象語言例如Java,函數是和類實例綁定在一起的(靜態函數可以脫離類實例,但綁定于類,仍然不能自由訪問)。

    (二)對象是關聯數組
    ActionScript語言的所謂對象,實際上是一個屬性和函數關聯數組。你可以定義一個類,包含若干屬性和函數。例如上述PetStoreFacadeImpl類。假設它包含一個String類型的屬性attribute,可以通過.操作符訪問屬性,如:
    PetStoreFacade facade = new PetStoreFacadeImpl();
    var attr:String = facade.attribute;

    訪問函數,通過 facade.getAccount(username)調用函數。實際上,還可以這樣:
    var attr:String = facade['attribute'];//數組
    facade['getAccount'].call(null,username) //數組
    或者
    facade['getAccount'].call(null,username,password) //數組

    看來,屬性和函數標識是作為其對象訪問時的唯一主鍵,因此也就沒辦法直接支持編碼式的函數重載了。

    posted on 2006-11-08 10:10 leoli 閱讀(959) 評論(0)  編輯  收藏 所屬分類: Flex

    導航

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    統計

    常用鏈接

    留言簿(6)

    隨筆分類

    隨筆檔案(17)

    文章分類(86)

    收藏夾(3)

    flex blog

    good site

    java blog

    my friend

    tools

    抓蝦

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲精品国产精品乱码不卡√| 四虎在线播放免费永久视频| 亚洲精品视频免费在线观看| 2021在线永久免费视频| 亚洲国产成人久久综合一| 亚洲大成色www永久网址| 香蕉视频免费在线| a级片免费观看视频| 99久久免费国产精品特黄| 免费一看一级毛片人| 亚洲AV午夜成人片| WWW亚洲色大成网络.COM| 久热免费在线视频| 日本二区免费一片黄2019| 亚洲av永久无码精品漫画| 久久一本岛在免费线观看2020| 日本不卡视频免费| selaoban在线视频免费精品| 国产成人免费爽爽爽视频| 久久精品国产精品亚洲精品| 亚洲av片不卡无码久久| 四虎成人精品国产永久免费无码| 亚洲最大免费视频网| 亚洲人成网站在线播放2019| 日本免费一区二区三区| 国产亚洲精品a在线观看| 亚洲成人一级电影| 国产午夜无码精品免费看| 国产精品亚洲视频| 久久免费公开视频| 亚洲精品女同中文字幕| 国产乱子精品免费视观看片| 亚洲视频一区调教| 成人毛片免费观看视频在线| 亚洲一区二区三区免费在线观看| 国产精品视_精品国产免费 | 亚洲日韩中文字幕日韩在线| 色偷偷亚洲女人天堂观看欧| 91频在线观看免费大全| 免费大片av手机看片| 亚洲成av人片一区二区三区|