簡體   English   中英

nodeJS中的重載函數調用

[英]Overloaded function call in nodeJS

我有兩個js文件add.js和testAdd.js

add.js

module.exports = function add(x,y) {
    console.log("------Starts x+y----");
    var a = x+y;
    console.log(a);
    return a;
}

module.exports = function add(x,y,z) {
    console.log("------Starts x+y+z----");
    var a = x+y+z;
    console.log(a);
    return a;
}

testAdd.js

var add = require('./add');

add(300,100);

add(300,100,233);

從testAdd我調用add.js中的add方法

發生的事情是函數調用總是轉到add(x,y,z),因為函數沒有根據參數進行選擇(如java中所示)。

我是nodeJS的新手。 有人能幫我理解這個流程嗎? 並幫助我解決這個問題。 提前致謝。

連接控制台o / p: -

在此輸入圖像描述

JavaScript沒有函數重載。 如果您希望函數采用可選的第三個參數,則可以設置默認值(使用最新的Node版本):

function add(x, y, z = 0) {
  ...
}

您可以將它與兩個( add(300, 100) )或三個( add(300, 100, 233) )參數一起使用。

如果您沒有最新的Node版本,則必須對第三個參數進行一些手動驗證:

function add(x, y, z) {
  z = Number.isFinite(z) ? z : 0;
  ...
}

Javascript不支持函數重載。 雖然羅伯特克爾普的解決方案很棒。 還有一種方法可以使用。這就是參數對象

當你要傳遞給函數的參數數目不詳的論點是非常好的。 在這里看到更多

下面是它的外觀。

//add.js
function add() {
  var args=Array.prototype.slice.call(arguments);
  console.log(arguments);
  console.log(args);
  console.log("------Starts x+y+z+.....and so on----");
  var ans = args.reduce(function(prev,curr){return prev+curr;});
  console.log(ans);
  return ans;
}
var sum = add(1,8,32,4);
module.exports = add;//to make it available outside.

在執行上述。(作為node add.js )時,輸出如下。

{ '0': 1, '1': 8, '2': 32, '3': 4 }
[ 1, 8, 32, 4 ]
------Starts x+y+z+.....and so on----
45

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM