【问题标题】:Export and reuse overloaded functions of a js file in another js file [duplicate]在另一个js文件中导出和重用一个js文件的重载函数[重复]
【发布时间】:2020-04-08 21:40:53
【问题描述】:

我正在尝试导出 js 文件的所有重载函数。这样我就可以在其他 js 文件中重用它们。但是,每当我尝试调用任何函数时,每次都会调用最高参数化函数。

reusefun.js

exports.getMessage = function(val1) {
   return val1;
}
exports.getMessage = function(val1,val2) {
   return val1+ " " +val2;
}
exports.getMessage = function(val1,val2,val3) {
   return val1+ " " +val2+ " " +val3;
}

假设我正在使用这个文件,如下所示

我的文件.js

const re = require('./reusefun);
console.log(re.getMessage("a"));

然后调用 getMessage(val1,val2,val3) 而不是 getMessage(val1) 。

【问题讨论】:

  • Javascript 并没有真正做到这样的函数重载。您必须将自己的重载逻辑编写到单个函数中
  • js不支持重载函数,这里将getMessge(val1)替换为getMessage(val1,val2,val3)
  • 在这种特殊情况下,您可以使用[a,b,c].join(' '); 来获得相同的结果。如果您对滚动自己的重载逻辑来处理可变数量/类型的参数感到好奇,那么这本身就是一个有趣的问题
  • 在你的代码中你没有重载你的函数你只是一次又一次地分配属性 getMessage 并且最后一个分配属性仍然存在这就是为什么它总是调用最高参数函数分配接受两个参数的函数最后,它总是调用该函数,因此最好使用 exports.getMessage = (..arr) => arr.join(" ");这适用于各种情况。

标签: javascript node.js


【解决方案1】:

在js中没有所谓的函数重载,你所能做的就是使用rest param在一个函数中传递不同数量的args并相应地应用我在sn-中提到的逻辑p.

function sum(...theArgs) {
  return theArgs.reduce((acc, value) => {
    acc = `${acc} ${value} `
    return acc;
  });
}

console.log(sum(1, 2, 3));
console.log(sum(1, 2));
console.log(sum(1, 2, 3, 4));

【讨论】:

    【解决方案2】:

    没有重载。如果您真的想要它,请改用。 或使用以下解决方案。

    exports.getMessage = (arrayArgs) => arrayArgs.join(" ");
    
    console.log(getMessage(["A", "B", "C"]));
    // expected output: A B C

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-26
      • 2019-07-16
      • 1970-01-01
      • 2021-08-20
      • 2014-10-29
      • 2022-06-17
      • 2021-09-19
      • 1970-01-01
      相关资源
      最近更新 更多