溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

js模擬怎么實(shí)現(xiàn)重載以及默認(rèn)參數(shù)

發(fā)布時(shí)間:2022-05-12 10:41:53 來源:億速云 閱讀:157 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容主要講解“js模擬怎么實(shí)現(xiàn)重載以及默認(rèn)參數(shù)”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“js模擬怎么實(shí)現(xiàn)重載以及默認(rèn)參數(shù)”吧!

模擬實(shí)現(xiàn)重載以及默認(rèn)參數(shù)

眾所周知,js是函數(shù)不支持重載和默認(rèn)參數(shù)的,但是我們可以使用一些其他方法來模擬這個(gè)方法的實(shí)現(xiàn)。

  • 首先看一下重載的定義:函數(shù)名相同,函數(shù)的參數(shù)列表不同(包括參數(shù)個(gè)數(shù)和參數(shù)類型),至于返回類型可同可不同。

  • 以及默認(rèn)參數(shù)的定義:默認(rèn)參數(shù)指的是當(dāng)函數(shù)調(diào)用中省略了實(shí)參時(shí)自動(dòng)使用的一個(gè)值。

那么如何實(shí)現(xiàn)這兩個(gè)功能呢,一個(gè)很簡單的方法就是使用arguments來進(jìn)行模擬。

下面先說實(shí)現(xiàn)重載的方法

	function overLoad(){//用這樣的方法模擬重載
		if(arguments[0]){//如果存在第一個(gè)參數(shù)
			if(arguments[1]){//如果第一個(gè)參數(shù)第二個(gè)參數(shù)都存在
				//to do...
				alert(arguments[0]+arguments[1]);
			}
			else{//如果只有第一個(gè)參數(shù)
				alert(arguments[0]);
				//to do...
			}
		}
		else{//如果無參
			alert("null");
			//to do...
		}
	}

接下來是實(shí)現(xiàn)默認(rèn)參數(shù)的方法

function defaultArg(){//用這樣的方法模擬默認(rèn)參數(shù)
    var a = arguments[0]?arguments[0]:"hello";//第一個(gè)參數(shù)的默認(rèn)值為hello
    var b = arguments[1]?arguments[1]:"world";//第二個(gè)參數(shù)的默認(rèn)值為world
    //...
    alert(a+b);
}

下面進(jìn)行一下測試

//重載測試
overLoad();//null
overLoad("hello ");//hello 
overLoad("hello ","world");//hello world
//默認(rèn)參數(shù)測試
defaultArg();//hello world
defaultArg("你好 ");//你好 world
defaultArg("你好 ","世界");//你好 世界

js的函數(shù)支持重載嗎

JavaScript的函數(shù)支持重載嗎?對于這個(gè)問題,主要有兩個(gè)點(diǎn),第一,JavaScript的函數(shù);第二,重載。

首先,說一下重載。所謂重載,簡單說,就是函數(shù)或者方法有相同的名稱,但是參數(shù)列表不相同的情形,這樣的同名不同參數(shù)的函數(shù)或者方法之間,互相稱之為重載函數(shù)或者方法。所以說,重載主要需要兩點(diǎn):第一,同樣的函數(shù)名。第二,不同的函數(shù)參數(shù)。

明確了重載的定義之后,我們再回到JavaScript這里。追本溯源,現(xiàn)在一說到JavaScript,我們就可以聯(lián)想到ECMAScript,即JavaScript的標(biāo)準(zhǔn)。那么,這個(gè)標(biāo)準(zhǔn)里面對函數(shù)做出了那些規(guī)范呢?

首先,ECMAScript是沒有函數(shù)簽名的概念的,因?yàn)槠鋮?shù)是由包含零或多個(gè)值的數(shù)組來表示的。而沒有函數(shù)簽名,真正的重載是不可能做到的。

其次,如果在ECMAScript中定義了兩個(gè)名字相同的函數(shù),則該名字只屬于后定義的函數(shù),如下:

function add(num){
    return num+1;
}
function add(num){
    return num+2;
}
var result = add(4);  //結(jié)果為6

在上面的例子中,add()函數(shù)被定義了兩次,然而,當(dāng)我們調(diào)用他的時(shí)候,卻直接調(diào)用了第二個(gè)函數(shù),這說明在JavaScript中,后定義的函數(shù)會(huì)覆蓋先定義的函數(shù)。

說到這里,是不是就可以判定JavaScript不支持函數(shù)重載了呢?

讓我來介紹一下JavaScript里面的一個(gè)arguments對象。首先,ECMAScript函數(shù)的參數(shù)與其他語言的函數(shù)參數(shù)有一點(diǎn)不同。ECMAScript函數(shù)不介意傳進(jìn)來的參數(shù)個(gè)數(shù)和類型。也就是說,在你定義了函數(shù)只接受兩個(gè)參數(shù)之后,你仍然可以在調(diào)用的時(shí)候傳遞零或多個(gè)參數(shù)。這并不會(huì)報(bào)錯(cuò)。原因就在于arguments對象。ECMAScript中,函數(shù)的參數(shù)始終是存放在一個(gè)數(shù)組中,而通過arguments對象,就可以訪問到這個(gè)數(shù)組。所以,只需要使用length屬性就可以確定調(diào)用函數(shù)時(shí)傳遞了多少個(gè)參數(shù)。

說到這里,我們可以來嘗試這樣寫:

function add(num1, num2){
    if(arguments.length == 1){
        alert("你輸入的只有一個(gè)數(shù)字:"+arguments[0]+" 請重新輸入");
    }else if(arguments.length == 2){
        alert("你輸入數(shù)字的和為:" + arguments[0]+arguments[1]);
}
}

通過這個(gè)例子,我們可以看出,通過檢查傳入函數(shù)中參數(shù)的數(shù)量,JavaScript函數(shù)可以做出不同的反應(yīng),這可以間接達(dá)到重載的目的。

所以,JavaScript是可以模仿函數(shù)的重載的。 

到此,相信大家對“js模擬怎么實(shí)現(xiàn)重載以及默認(rèn)參數(shù)”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

js
AI