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