創作內容

0 GP

【AS】為什麼Actionscript不支援重載(overload)

作者:皮卡丘後空翻│2012-04-17 14:47:53│巴幣:0│人氣:346
今天想寫個雜訊類別的時候遇上的問題
上網拜神看到有人問了一樣的問題
回答也很清楚


不過
既然我現在很閒
加上這篇用字很簡單
加上應該很多人跟我一樣英文閱讀超慢
加上如果不用心寫個翻譯的話我一定會隨便看一看然後下禮拜就忘記
所以就來亂翻一下



問:
Actionscript 明明就是建立在物件導向的架構上
為什麼它不支援重載 (註1)
Flex (註2) 支援它嗎?

答:
沒錯,Actionscript 的確不支援重載,當然Flex也是
但我們的函數可以有預設的參數
像這樣:
public function DoSomething(a:String='', b:SomeObject=null, c:Number=0):void
於是 DoSomething() 函數可以用 4 種方法來呼叫它:

DoSomething()
DoSomething('aString')
DoSomething('aString', anObject)
DoSomething('aString', anObject, 123)
這樣搞是因為Actionscript遵循ECMA腳本標準(註3)
函數被當作是物件的屬性(property)之一
所以,就像你不能讓物件擁有重複的屬性一樣,方法(method)也不能重名

你可以參考ECMA-262
在83頁的位置說明了當你宣告一個函數像這樣:
function Identifier(arg0, arg1) {
    
// body
}
的時候
就是在物件中宣告了一個屬性ID
而它的值是一個function物件(註4)
new Function(arg0, arg1, body)
這就是你不能重載的原因
因為 Actionscript 將類別中的函數視為一個裝著函數物件的屬性



註1:
overload,重寫同名函數使呼叫函數者可以選擇帶入哪些參數的技巧
比如在JAVA我們會這樣寫
public setCanvas(int width, int height){}
public setCanvas(int alpha){}

當這樣呼叫的時候
painter.setCanvas(50, 50);
它會設定畫布的長寬
painter.setCanvas(0.6);
這樣它會設定畫布的可見程度

呼叫同一個函數名,用帶入什麼樣的參數來決定做什麼

註2:
用來開發RIA程式的工具
它把Flash Player當作VM來使用
讓桌面應用程式可以靠瀏覽器來操作
利用各平台上的Flash Player用不同的實作來達到跨平台的目的

註3:
ECMA是一個國際協會
它負責制定各項標準
C#、C++、Javascript等等語言的規範都是由它來負責

註4:
在 Actionscript、Javascript 等等語言中
函數被視為一個物件( AS 根本所見皆物件......)
也就是說它具有實體
可以被 new 出來
也可以被當作參數傳遞(不要懷疑!)
引用網址:https://home.gamer.com.tw/TrackBack.php?sn=1582210
All rights reserved. 版權所有,保留一切權利

相關創作

同標籤作品搜尋:actionscript|overload|javascript|default parameters|預設參數|重載

留言共 0 篇留言

我要留言提醒:您尚未登入,請先登入再留言

喜歡★p52189 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:最近開始玩臥龍吟... 後一篇:母孟克...

追蹤私訊切換新版閱覽

作品資料夾

colanncolann
【繪圖創作】【優嵐】2024生日賀圖 2024/4/3 https://home.gamer.com.tw/creationDetail.php?sn=5910498看更多我要大聲說昨天23:55


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】