nodeJS中的重载函数调用

时间:2016-09-01 06:37:08

标签: node.js

我有两个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: -

enter image description here

2 个答案:

答案 0 :(得分:6)

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;
  ...
}

答案 1 :(得分:2)

Javascript不支持函数重载。 虽然robertklep的解决方案很棒。还有一种方法可以使用。那就是参数对象

  如果要将未知数量的参数传递给函数,

参数非常好。 see more here

下面是它的外观。

//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