javascript函數(shù)重載解決方案分享
JS的函數(shù)定義可以指定形式參數(shù)名稱,多多少少我們會(huì)以為js至少可以支持參數(shù)個(gè)數(shù)不同的方法重載,然而遺憾的是這僅僅是一個(gè)假象,js所有的參數(shù)都是以arguments傳遞過(guò)去的,這個(gè)參數(shù)類似于數(shù)組,在函數(shù)調(diào)用的時(shí)候,所有的實(shí)參都是保存在了這個(gè)數(shù)據(jù)結(jié)構(gòu)里面,我們定義函數(shù)的時(shí)候所指定的形式參數(shù)其實(shí)是為這個(gè)數(shù)據(jù)結(jié)構(gòu)里面的數(shù)據(jù)定義一個(gè)快捷的訪問(wèn)方式。也就是說(shuō)js所有的函數(shù)都是支持無(wú)限個(gè)參數(shù)的,加上數(shù)據(jù)類型是弱類型,那么JS的函數(shù)除了名稱就真的沒(méi)有方法區(qū)別了?
辦法總是有的,我們可以利用JavaScript中的特殊對(duì)象arguments來(lái)模擬函數(shù)重載。用它來(lái)判斷傳入?yún)?shù)的個(gè)數(shù)或類型以區(qū)分重載。
1.根據(jù)參數(shù)個(gè)數(shù)重載
js判斷傳入?yún)?shù)數(shù)量可以用arguments.length這個(gè)屬性來(lái)判斷;
<script type="text/javascript">
function add() {
if (arguments.length == 1) {
alert(arguments[0] + 10);
}
else if (arguments.length == 2) {
alert(arguments[0] + arguments[1]);
}
}
//函數(shù)調(diào)用
add(10);
add(10, 20);
</script>
2.根據(jù)參數(shù)類型重載
判斷變量類型的3種方法:
1.用 typeof 語(yǔ)句判斷變量類型,typeof語(yǔ)句返回類型對(duì)應(yīng)的字符串。
2.用 instanceof 語(yǔ)句判斷變量類型,instanceof語(yǔ)句返回true/false。
3.用 constructor 屬性判斷變量類型,這個(gè)屬性返回用來(lái)構(gòu)造該變量的構(gòu)造函數(shù)引用。
對(duì)照表:可以看出用 typeof 不能準(zhǔn)確的判斷出具體的類型,所以我們用 constructor 來(lái)進(jìn)行判斷。
typeof | string | number | object | function | boolean | object | object |
constructor | String | Number | Object | Function | Boolean | Array | User Define |
<script type="text/javascript">
function add()
{
if (arguments.length == 0) return 0;
var sum=0;
for(var i=0; i<arguments.length; i++){
if(arguments[i].constructor == Number){
//或者改為:if(arguments[i] instanceof Number)
//或者改為:if(typeof(arguments[i])=="number")
sum += arguments[i];
}
}
return sum;
}
//函數(shù)調(diào)用
alert(add(10));
alert(add(10,20));
</script>
- 如何實(shí)現(xiàn)JS函數(shù)的重載
- js 覆蓋和重載 函數(shù)
- js中方法重載如何實(shí)現(xiàn)?以及函數(shù)的參數(shù)問(wèn)題
- JS函數(shù)重載的解決方案
- 有關(guān)于JS構(gòu)造函數(shù)的重載和工廠方法
- Javascript基礎(chǔ) 函數(shù)“重載” 詳細(xì)介紹
- 詳解JS函數(shù)重載
- 為JavaScript添加重載函數(shù)的輔助方法
- JavaScript中的函數(shù)重載深入理解
- 添加JavaScript重載函數(shù)的輔助方法2
- 通過(guò)實(shí)例理解javascript中沒(méi)有函數(shù)重載的概念
- JavaScript函數(shù)重載操作實(shí)例淺析
相關(guān)文章
JavaScript中也使用$美元符號(hào)來(lái)代替document.getElementById
JavaScript可以定義$符號(hào)函數(shù),簡(jiǎn)寫或書寫兼容性更好的代碼。2010-06-06JavaScript CSS修改學(xué)習(xí)第三章 修改樣式表
在這一章我打算通過(guò)直接修改頁(yè)面的樣式表而不是通過(guò)訪問(wèn)元素的辦法來(lái)修改PRE的背景顏色。不幸的是,瀏覽器嚴(yán)重的不兼容性讓這個(gè)代碼基本上不能使用。2010-02-02javascript創(chuàng)建和存儲(chǔ)cookie示例
javascript創(chuàng)建和存儲(chǔ)cookie,cookie是存儲(chǔ)于訪問(wèn)者的計(jì)算機(jī)中的變量,下面看一下使用示例吧2014-01-01總結(jié)javascript三元運(yùn)算符知識(shí)點(diǎn)
這是一篇關(guān)于javascript三元運(yùn)算符的相關(guān)基礎(chǔ)知識(shí)點(diǎn)內(nèi)容,大家可以學(xué)習(xí)一下鞏固基礎(chǔ)知識(shí)。2018-09-09網(wǎng)頁(yè)收藏夾顯示ICO圖標(biāo)(代碼少)
在添加網(wǎng)頁(yè)到收藏夾之后會(huì)看到一個(gè)漂亮的圖標(biāo),很好奇是怎么實(shí)現(xiàn)的呢?下面小編就給大家講解下網(wǎng)頁(yè)收藏夾顯示ICO圖標(biāo)(代碼少),有需要的小伙伴可以來(lái)參考下2015-08-08javascript 構(gòu)造函數(shù)方式定義對(duì)象
這篇文章主要介紹了javascript 構(gòu)造函數(shù)方式定義對(duì)象的方法及示例,需要的朋友可以參考下2015-01-01