首頁  >  文章  >  web前端  >  javascript可以實作函數重載嗎

javascript可以實作函數重載嗎

青灯夜游
青灯夜游原創
2022-01-18 14:52:002132瀏覽

javascript可以實作函數重載。在javascript函數內部有一個arguments對象,可以透過arguments物件取得參數列表,判定參數的數量使用不同的方法來模擬函數重載效果。

javascript可以實作函數重載嗎

本教學操作環境:windows7系統、javascript1.8.5版、Dell G3電腦。

JavaScript的函數支援重載嗎?可以實現函數重載嗎?對於這個問題,主要有兩個點,第一,JavaScript的函數;第二,重載。

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

明確了重載的定義之後,我們再回到JavaScript這裡。追本溯源,現在一說到JavaScript,我們就可以聯想到ECMAScript,也就是JavaScript的標準。那麼,這個標準裡面對函數做出了那些規範呢?

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

其次,如果在ECMAScript中定義了兩個名字相同的函數,則該名字只屬於後定義的函數,如下:

function add(num){
    return num+1;
}
function add(num){
    return num+2;
}
var result = add(4);  //结果为6

在上面的例子中,add()函數被定義了兩次,然而,當我們呼叫他的時候,卻直接呼叫了第二個函數,這說明在JavaScript中,後定義的函數會覆寫先定義的函數。

說到這裡,是不是就可以判定JavaScript不支援函數重載了呢?

讓我來介紹一下JavaScript裡面的一個arguments物件。首先,ECMAScript函數的參數與其他語言的函數參數有一點不同。 ECMAScript函數不介意傳進來的參數個數和型別。也就是說,在你定義了函數只接受兩個參數之後,你仍然可以在呼叫的時候傳遞零或多個參數。這並不會報錯。原因就在於arguments物件。 ECMAScript中,函數的參數總是存放在一個陣列中,而透過arguments對象,就可以存取到這個陣列。所以,只需要使用length屬性就可以確定呼叫函數時傳遞了多少個參數。

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

function add(num1, num2){
    if(arguments.length == 1){
        alert("你输入的只有一个数字:"+arguments[0]+" 请重新输入");
    }else if(arguments.length == 2){
        alert("你输入数字的和为:" + arguments[0]+arguments[1]);
}
}

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

所以,JavaScript是可以模仿函數的重載的。

【相關推薦:javascript學習教學

#

以上是javascript可以實作函數重載嗎的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn