x = 10; // 表示整數值資料型態。
x = "小爪哇"; // 接著再指定字串,馬上轉成字串資料型態。
因為這個特性,所以無法對應資料型態作Overload還可以理解,但沒有料想到連傳入參數的個數差異也無法Overload,實在是始料未及。
這幾天應公司要求支援,因此被調去使用JavaScript協助撰寫一些Web程式的功能;已經好久沒有使用JavaScript寫程式,以前只用來寫一些DHTML的花俏功能讓自己看起來很興奮,就沒有再更進一步去了解JavaScript的特性。還好這次只是協助撰寫資料檢查的功能函數,應該不會用到太深度的語法,理論上來說應該不會碰上啥問題才對。
由於JavaScript跟C語言的語法雷同,所以就左貼貼、右改改,很快速的就完成一些函數,開始測試~!?怎麼執行結果怪怪的?反回去查才發現,怎麼某個函數功能一直沒有被執行?上網查了一下才發現,哇勒!!JavaScript不能使用同名異構函數!!...orz
舉例來說,底下的二個同名函數:
function MyAlert(First) { alert("One Argument"); } function MyAlert(First, Second) { alert("Two Arguments"); } MyAlert("Argument"); // Two Arguments
在原先的認知下,應該是要顯示"One Argument",但是上述例子的執行結果居然是"Two Arguments",最後一次定義的函數發生作用。還好開始進行沒多久就發現這個不應該犯的錯,不然回頭不知得花多少時間來調整這些函數。
在網路上翻閱的幾篇文章中,關於參數個數的說明可以參考「The arguments array- the secret to robust functions」, 作者對於參數個數的用法提出頗詳細的說明與範例。文中提到,由於JavaScript函數的參數傳遞採用陣列方式(arguments array),因此傳入參數的個數可用arguments.length取得。所以作者在文章中特別舉出robust function範例,特意不在定義中加入參數,而在函數中使用物件arguments的length屬性來取得參數個數。
看來還要再花點心思了解JavaScript的語法,萬一再帶入一些JavaScript語言不支援的作法‧‧‧只怕又得加班餵「臭蟲」了!!
沒有留言:
張貼留言