欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

js模擬如何實現(xiàn)重載以及默認參數(shù)

 更新時間:2022年05月11日 16:55:49   作者:TimeTDIT  
這篇文章主要介紹了js模擬如何實現(xiàn)重載以及默認參數(shù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

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

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

  • 首先看一下重載的定義:函數(shù)名相同,函數(shù)的參數(shù)列表不同(包括參數(shù)個數(shù)和參數(shù)類型),至于返回類型可同可不同。
  • 以及默認參數(shù)的定義:默認參數(shù)指的是當函數(shù)調(diào)用中省略了實參時自動使用的一個值。

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

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

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

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

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

下面進行一下測試

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

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

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

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

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

首先,ECMAScript是沒有函數(shù)簽名的概念的,因為其參數(shù)是由包含零或多個值的數(shù)組來表示的。而沒有函數(shù)簽名,真正的重載是不可能做到的。

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

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

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

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

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

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

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

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

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

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。 

相關文章

  • js中關于new Object時傳參的一些細節(jié)分析

    js中關于new Object時傳參的一些細節(jié)分析

    這里討論給Object傳參時,其內(nèi)部的處理。參考:ECMA262 V5 15.2.2.1
    2011-03-03
  • uniapp中scroll-view基礎用法示例代碼

    uniapp中scroll-view基礎用法示例代碼

    我們在項目中往往都能遇到實現(xiàn)左右滑動跟上下滑動的需求,下面這篇文章主要給大家介紹了關于uniapp中scroll-view基礎用法的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-11-11
  • ECMAscrip新特性函數(shù)介紹

    ECMAscrip新特性函數(shù)介紹

    這篇文章主要介紹了ECMAscrip新特性之函數(shù)的擴展,在ECMAScript?2015中,允許為函數(shù)的參數(shù)添加默認值,將默認值直接寫在參數(shù)的后面即可,具體情況參考下面文章的詳細內(nèi)容
    2021-12-12
  • JavaScript實現(xiàn)輪播圖特效

    JavaScript實現(xiàn)輪播圖特效

    這篇文章主要為大家詳細介紹了JavaScript實現(xiàn)輪播圖特效,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • 使用js簡單實現(xiàn)了tree樹菜單

    使用js簡單實現(xiàn)了tree樹菜單

    使用js簡單實現(xiàn)了樹菜單!具體實現(xiàn)實例代碼如下,相信自己你一定可以實現(xiàn)的更好
    2013-11-11
  • 原生JS上傳大文件顯示進度條 php上傳文件代碼

    原生JS上傳大文件顯示進度條 php上傳文件代碼

    這篇文章主要為大家詳細介紹了JS原生上傳大文件顯示進度條,php上傳文件關鍵代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • Javascript中string轉(zhuǎn)date示例代碼

    Javascript中string轉(zhuǎn)date示例代碼

    string轉(zhuǎn)date的方法有很多,在接下來為大家介紹下Javascript中是如何做到的,感性取的朋友不要錯過
    2013-11-11
  • 最新評論