亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

JavaScript中的方法重載

JavaScript中的方法重載

偶然的你 2019-10-21 10:15:54
我在Javascript代碼中使用以下方法重載。function somefunction(){    //1st function}function somefunction(a){   //2nd function}function somefunction(a,b){   //3rd function}somefunction(); // function call goes here我不明白的是,如果我調用somefunction()javascript應該調用第一個函數,但是問題是javascript實際上調用了第三個函數。這是為什么?如何調用第一和第二函數?這是什么原因呢?有沒有適當的方法可以在Javascript中實現方法重載?行業標準是什么?
查看完整描述

3 回答

?
慕俠2389804

TA貢獻1719條經驗 獲得超6個贊

JavaScript不支持方法重載(如Java或類似方法),您的第三個函數將覆蓋之前的聲明。


而是通過argumentsobject支持變量參數。你可以做


function somefunction(a, b) {

    if (arguments.length == 0) { // a, b are undefined

        // 1st body

    } else if (arguments.length == 1) { // b is undefined

        // 2nd body

    } else if (arguments.length == 2) { // both have values

        // 3rd body

    } // else throw new SyntaxError?

}

你也可以只檢查typeof a == "undefined"等,這將允許呼叫somefunction(undefined),其中arguments.length為1。這可能允許使用各種參數進行輕松調用,例如,當您有可能為空的變量時。


查看完整回答
反對 回復 2019-10-21
?
慕容708150

TA貢獻1831條經驗 獲得超4個贊

JS將傳遞undefined未提供的任何參數。如果您想要類似重載的操作,則需要執行類似于以下代碼的操作:


function someFunction(a, b) {

    if (typeof a === 'undefined') {

        // Do the 0-parameter logic

    } else if (typeof b === 'undefined') {

        // Do the 1-parameter logic

    } else {

        // Do the 2-parameter logic

    }

}


查看完整回答
反對 回復 2019-10-21
?
犯罪嫌疑人X

TA貢獻2080條經驗 獲得超4個贊

您只是在somefunction每個新聲明中擦除變量。


這相當于


   window.somefunction = function(...

   window.somefunction = function(...

   window.somefunction = function(...

Javascript不提供方法重載。


正確的方法是:


定義第三個功能并測試定義了哪些參數

只傳遞一個包含參數的對象(這并沒有什么不同,但更干凈)


查看完整回答
反對 回復 2019-10-21
  • 3 回答
  • 0 關注
  • 510 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號