ActionScript語言函數(shù)重載
ActionScript與JavaScript類似,都是符合ECMAScript語言規(guī)范的語言。ActionScript 3.0更是向面向?qū)ο?/b>語言靠近了一大步。相對而言,JavaScript則在停留在基于對象的層次上(曾經(jīng)看到一份資料,說Firefox對JavaScript的支持有一個(gè)時(shí)間表,大概到07年春季就能支持JavaScript2.0,目前也就是1.5左右)。 拋開ActionScript與JavaScript的版本不談,讓我們探討一些以下幾個(gè)問題: 首先,官方對ActionScript3.0的描述如下: 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的確是支持面向?qū)ο笳Z言的,但它不是作為一個(gè)面向?qū)ο笳Z言來設(shè)計(jì)的。它源自腳本語言,并支持對象的概念。引入面向?qū)ο髾C(jī)制是為了克服腳本語言面對大型軟件開發(fā)的重用、維護(hù)及擴(kuò)展的難題。實(shí)際上,脫離應(yīng)用和歷史,談?wù)撃撤N語言的面向?qū)ο髾C(jī)制的純粹性毫無意義可言(就像論壇經(jīng)常就C++或Java孰優(yōu)孰劣論戰(zhàn)一樣毫無意義)。 其次,ActionScript語言為什么不支持函數(shù)重載。 照我的理解,函數(shù)重載(Function Override)從來不是面向?qū)ο笳Z言的核心。因此,ActionScript語言是否支持函數(shù)重載不應(yīng)該成為人們批評或質(zhì)疑它的原因之一,是否實(shí)現(xiàn)函數(shù)重載完全取決于你的應(yīng)用。 曾經(jīng)遇到一個(gè)問題,Java語言的某個(gè)類接口要映射要ActionScript類,由于該類的接口有函數(shù)重載的現(xiàn)象,導(dǎo)致ActionScript無法聲明相應(yīng)的接口。例如: //ActionScript類 從此例,大家可以看出,討論ActionScript是否支持函數(shù)重載的來源了(這大概是其中之一,即與支持函數(shù)重載的語言配合工作,或者要從支持函數(shù)重載的語言遷移到ActionScript就可能會(huì)遇到函數(shù)重載的問題)。 關(guān)于ActionScript支持函數(shù)重載的文章很多,通過ActionScript提供的語言機(jī)制和變通的手法,可以讓ActionScript支持函數(shù)重載。示例如下: class PetStoreFacadeImpl{ 通過arguments的判斷比較,實(shí)現(xiàn)了函數(shù)重載,只需調(diào)用時(shí)傳入合適的參數(shù)即可。不過我們?nèi)匀灰獑枺瑸槭裁碅ctionScript不能直接支持函數(shù)重載。語言內(nèi)部的實(shí)現(xiàn)機(jī)制是怎么樣的?仔細(xì)查閱了一些資料之后,發(fā)現(xiàn)這個(gè)問題其實(shí)很簡單。原來,這跟ActionScript語言的內(nèi)部設(shè)計(jì)實(shí)現(xiàn)有關(guān)。我們給出幾個(gè)重要的概念,有助于理解上述問題。 (一)函數(shù)也是對象 (二)對象是關(guān)聯(lián)數(shù)組 訪問函數(shù),通過 facade.getAccount(username)調(diào)用函數(shù)。實(shí)際上,還可以這樣: 看來,屬性和函數(shù)標(biāo)識(shí)是作為其對象訪問時(shí)的唯一主鍵,因此也就沒辦法直接支持編碼式的函數(shù)重載了。 |
posted on 2006-11-08 10:10 leoli 閱讀(968) 評論(0) 編輯 收藏 所屬分類: Flex