Javascript不像其他程式語言一樣具有函數簽名(什麼是函數簽名,簡單的說就是說函數的接受參數類型和參數個數,也有人認為返回類型也應該包括。具體概念大家可以到網上查詢)。
所以Javascript是不能像其他語言一樣實現方法名相同,參數個數不同…的這類重載的,不信你可以試試:
alert("1 ");
}
function show(num1){
>
window.onload=function(){
show();
show(2);
}
斷點調試下,不帶參數的show方法是不會被執行的,它會被show(num1)方法給覆蓋掉。
那麼Javascript中就不可以實現「重載」了麼?答案是可以的,只是另一種方式而已。對,就是利用arguments。
那麼什麼是arguments呢?在JS中它是一個特殊的屬性,它可以像數組一樣透過下標索引來取得參數的值(但它不是數組),透過length取得參數個數:
複製碼
代碼如下: alert("參數個數:" arguments.length);//輸出:參數個數:4
alert("下標索引為3的參數:" arguments[3]);//輸出: 下標索引為3的參數:" arguments[3]);//輸出: 下標索引為3的參數:你好
}
window.onload=function(){ }
還要知道的一點是JS中函數的命名參數不是必須的,所以要想知道呼叫時傳遞了多少個參數還是得透過arguments取得參數。
下面就實作一個簡單的方法重載:
複製碼
}
window.onload=function(){
showMessage ("張三","Hi 你妹");
}
這樣JS的重載算是實現了。
在看js高階程式設計這本書的時候發現arguments的值與對應命名參數的值永遠同步,以前沒注意過這個問題
複製程式碼
程式碼如下:
function showMessage(name,msg){
name "說:" msg);//輸出:張三說:我可以改變msg的值
}
window.onload=function(){
}
好吧關於js「重載」的基礎知識就這麼