在另一个js文件中导出和重用一个js文件的重载函数[重复]

Posted

技术标签:

【中文标题】在另一个js文件中导出和重用一个js文件的重载函数[重复]【英文标题】:Export and reuse overloaded functions of a js file in another js file [duplicate] 【发布时间】: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(" ");这适用于各种情况。 【参考方案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】:

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

exports.getMessage = (arrayArgs) => arrayArgs.join(" ");

console.log(getMessage(["A", "B", "C"]));
// expected output: A B C

【讨论】:

以上是关于在另一个js文件中导出和重用一个js文件的重载函数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在另一个文件中导出,在同一个文件中调用[重复]

无法在nodejs中导入带有require()的模块

在聚合物2.0中导入js库

只从 js 文件中导出一个函数?

在Node / Electron环境中共享ESM“.js”模块

我们可以在另一个 JS 文件中调用用一个 JavaScript 编写的函数吗?