js面向?qū)ο缶幊讨绾螌?shí)現(xiàn)方法重載
js中如何實(shí)現(xiàn)方法重載?這涉及到三個(gè)問(wèn)題
1.同名函數(shù)的調(diào)用問(wèn)題
2.函數(shù)中特殊的參數(shù)arguments
3.如何利用arguments實(shí)現(xiàn)方法重載
1、同名函數(shù)的調(diào)用問(wèn)題
都知道在js中如果存在多個(gè)名稱(chēng)相同的函數(shù),則調(diào)用實(shí)際每次都只使用最后一個(gè),js其實(shí)是沒(méi)有重載的,也就是說(shuō),如果定義了多個(gè)同名的函數(shù),單參數(shù)不一樣,在調(diào)用時(shí),js不管參數(shù)個(gè)數(shù),只管前后順序
例如:
function test1(arg1) { alert("參數(shù)1:"+arg1); } function test1(arg1,arg2,arg3) { alert("參數(shù)1:"+arg1+"參數(shù)2:"+arg2+"參數(shù)3:"+arg3); } //測(cè)試代碼 function test(){ test1("1") }
雖然我們調(diào)用的是test1("1"),傳遞了一個(gè)參數(shù),但實(shí)際調(diào)用的卻是test1(arg1,arg2,arg3),并沒(méi)有因?yàn)槲覀儌鬟f了一個(gè)參數(shù),而調(diào)用只有一個(gè)參數(shù)的方法。
2、函數(shù)中特殊的參數(shù)arguments
如果我們使用如下的代碼
function test1(arg1,arg2,arg3) { alert("參數(shù)1:"+arg1+"參數(shù)2:"+arg2+"參數(shù)3:"+arg3); } function test1(arg1) { alert("參數(shù)1:"+arg1); } //測(cè)試代碼 function test(){ test1("1","2") }
我們知道調(diào)用的始終是test1(arg1),也就是只有一個(gè)參數(shù)的函數(shù),但如何獲取傳遞的其他參數(shù)呢?
這就要用到函數(shù)中特殊的參數(shù)arguments,arguments包含了所有傳遞給函數(shù)的參數(shù)
function test1() { var text=""; for(var i=0;i<arguments.length;i++){ text+="參數(shù)"+i+":"+arguments[i]; } alert(text); } //測(cè)試代碼 function test(){ test1("1"); test1("1","2"); test1("1","2","3"); }
經(jīng)過(guò)測(cè)試發(fā)現(xiàn),arguments包含了傳遞給函數(shù)的所有參數(shù),并且arguments.length根據(jù)實(shí)際傳遞參數(shù)的個(gè)數(shù)的不同而不同,arguments.length代表了實(shí)際傳遞給函數(shù)參數(shù)的個(gè)數(shù)。
3、如何在js中實(shí)現(xiàn)函數(shù)的重載?
經(jīng)過(guò)以上的測(cè)試發(fā)現(xiàn),在js中不能直接實(shí)現(xiàn)函數(shù)的重載,但有沒(méi)有辦法實(shí)現(xiàn)類(lèi)似重載效果的方法呢?
可以,主要就是利用arguments
例如:
function test1() { var text=""; if(arguments.length==1) { //調(diào)用一個(gè)參數(shù)的方法 } else if(arguments.length==2) { //調(diào)用兩個(gè)參數(shù)的方法 } else { //其他的方法 } }
相關(guān)文章
js實(shí)現(xiàn)可控制左右方向的無(wú)縫滾動(dòng)效果
這篇文章主要介紹了js實(shí)現(xiàn)可控制左右方向的無(wú)縫滾動(dòng)效果,頁(yè)面中添加了兩個(gè)按鈕,控制圖片滾動(dòng)的方向,感興趣的小伙伴們可以參考一下2016-05-05js關(guān)于精確計(jì)算和數(shù)值格式化以及直接引js文件
本文為大家介紹下關(guān)于精確計(jì)算和數(shù)值格式化以及直接引js文件,大家可以學(xué)習(xí)下2014-01-01實(shí)例講解DataTables固定表格寬度(設(shè)置橫向滾動(dòng)條)
下面小編就為大家?guī)?lái)一篇實(shí)例講解DataTables固定表格寬度(設(shè)置橫向滾動(dòng)條)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-07-07js實(shí)現(xiàn)注冊(cè)頁(yè)面校驗(yàn)功能
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)注冊(cè)頁(yè)面校驗(yàn)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08JavaScript 上萬(wàn)關(guān)鍵字瞬間匹配實(shí)現(xiàn)代碼
發(fā)一篇之前寫(xiě)的文章,平時(shí)還是經(jīng)常用到的,尤其是河蟹詞特別多的聊天系統(tǒng)里2013-07-07自己寫(xiě)的Javascript計(jì)算時(shí)間差函數(shù)
Javascript計(jì)算時(shí)間差函數(shù),獲得時(shí)間差,時(shí)間格式為 年-月-日 小時(shí):分鐘:秒 或者 年/月/日 小時(shí):分鐘:秒。2013-10-10js change,propertychange,input事件小議
github上關(guān)于mootools一個(gè)issue的討論很有意思,所以就想測(cè)試記錄下。感興趣的可以點(diǎn)擊原頁(yè)面看看2011-12-12