国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

js中方法重載如何實現?以及函數的參數問題

2019-11-20 22:28:46
字體:
來源:轉載
供稿:網友
都知道在js中沒有辦法直接實現方法重載,因為在js中如果定義了多個名稱相同,但參數個數不一樣的方法,其實只有最后一個方法能被真正調用,其他的方法都被覆蓋掉了。

但每一個函數都有一個特殊的參數arguments,利用它可以實現方法的重載。

例如:
復制代碼 代碼如下:

function Add(firstnumber,sencondnumber) {
return firstnumber+sencondnumber;
}

只能處理兩個參數,如果有多個參數,或者沒有參數,一個參數的情況都是處理不了的。如果沒有傳遞參數,則firstnumber,sencondnumber都是未定義的,如果傳遞了一個參數,就相當于只給firstnumber賦值了,sencondnumber依然是未定義。相反如果傳遞了多于兩個的參數,則相當于firstnumber,sencondnumber都賦值了,雖然還有其他的參數,但處理時都忽略掉了。如果能獲取其他的參數,自然就可以處理了。此時應該就可以想到函數的特殊參數arguments,這個包含了傳遞給函數的所有參數,利用它就可以實現方法重載的效果。

以上的方法修改如下:
復制代碼 代碼如下:

function Add(firstnumber,sencondnumber) {
if (arguments.length == 0)//沒有傳遞參數
{
return null;
}
else if (arguments.length == 1) {//傳遞的是一個參數
return firstnumber;//也可以寫為 return arguments[0];
}
else if(arguments.length == 2)//傳遞的是兩個參數
{

return firstnumber+sencondnumber;//也可以寫為 return arguments[0]+arguments[1];
}

else {
var total=0;
for (var i = 0; i < arguments.length; i++) {
total=total+arguments[i]
}
return total;
}

}

當然這種方法的弊端就是參數的順序不能打亂,如果函數實現依賴于參數的順序,就必須進行特殊處理,例如傳遞null來占位。

由于傳遞給函數的參數是嚴格按照定義函數的順序給每一個參數賦值的,如果只想給第二個參數賦值,則必須傳遞兩個參數,否則實際上傳遞的值賦值給了第一個參數,并沒有賦值給第二個參數。

例如只想給sencondnumber傳值,但不想給firstnumber傳值,必須這樣調用Add(null,2)(當然函數內部必須處理傳遞特殊值的情況),如果這樣調用Add(2),其實是給firstnumber傳值了,相當于調用了傳遞了一個參數的情況。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 罗甸县| 遂昌县| 庆城县| 凤城市| 铜川市| 克拉玛依市| 河池市| 天全县| 蛟河市| 内江市| 包头市| 宜章县| 故城县| 新和县| 丹巴县| 禄丰县| 台江县| 青川县| 万州区| 平阴县| 丰城市| 睢宁县| 麟游县| 温泉县| 营口市| 林周县| 搜索| 木兰县| 来宾市| 蓝山县| 巴塘县| 花莲市| 洛南县| 凤翔县| 宾阳县| 庐江县| 大荔县| 建水县| SHOW| 冀州市| 富源县|