js中沒有辦法直接實現方法重載
但每一個函數都有一個特殊的參數arguments
利用它可以實現方法的重載
具體示例如下
都知道在js中沒有辦法直接實現方法重載因為在js中如果定義了多個名稱相同但參數個數不一樣的方法其實只有最後一個方法能被真正調用其他的方法都被覆蓋掉了
但每一個函數都有一個特殊的參數arguments利用它可以實現方法的重載
例如
復制代碼 代碼如下:
function Add(firstnumber
sencondnumber) {
return firstnumber+sencondnumber;
}
只 能處理兩個參數如果有多個參數或者沒有參數一個參數的情況都是處理不了的如果沒有傳遞參數則 firstnumbersencondnumber都是未定義的如果傳遞了一個參數就相當於只給firstnumber賦值 了sencondnumber依然是未定義相反如果傳遞了多於兩個的參數則相當於firstnumbersencondnumber都賦值了雖 然還有其他的參數但處理時都忽略掉了如果能獲取其他的參數自然就可以處理了此時應該就可以想到函數的特殊參數arguments這個包含了傳遞 給函數的所有參數利用它就可以實現方法重載的效果
以上的方法修改如下
復制代碼 代碼如下:
function Add(firstnumber
sencondnumber) {
if (arguments
length ==
)//沒有傳遞參數
{
return null;
}
else if (arguments
length ==
) {//傳遞的是一個參數
return firstnumber;//也可以寫為 return arguments[
];
}
else if(arguments
length ==
)//傳遞的是兩個參數
{
return firstnumber+sencondnumber;//也可以寫為 return arguments[
]+arguments[
];
}
else {
var total=
;
for (var i =
; i < arguments
length; i++) {
total=total+arguments[i]
}
return total;
}
}
當然這種方法的弊端就是參數的順序不能打亂如果函數實現依賴於參數的順序就必須進行特殊處理例如傳遞null來占位
由於傳遞給函數的參數是嚴格按照定義函數的順序給每一個參數賦值的如果只想給第二個參數賦值則必須傳遞兩個參數否則實際上傳遞的值賦值給了第一個參數並沒有賦值給第二個參數
例如只想給sencondnumber傳值但不想給firstnumber傳值必須這樣調用Add(null)(當然函數內部必須處理傳遞特殊值的情況)如果這樣調用Add()其實是給firstnumber傳值了相當於調用了傳遞了一個參數的情況
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/20352.html