我可以在node.js的module.export中重载方法吗?

时间:2018-08-23 12:55:23

标签: node.js

我有一个使用以下代码的app.js:

var addnote = (title,body) => { /* enter code here */ }
module.exports = {addnote};

我可以向该文件添加另一个具有不同参数的addnotes函数吗?

2 个答案:

答案 0 :(得分:1)

JavaScript中的函数重载不像其他编程语言(例如C#和Java)那样存在。

您应该做的是将对象作为参数附加属性,然后将其过滤掉。

您可以从小的“映射函数”中调用不同的函数,只要不大就可以在其中实现逻辑(保持代码清晰)。

function foo(parameters){

   var title = parameters.title;
   var body = parameters.body;

   if(parameters.extraProperty){
      // oh we have extraProperty passed in too, run a different function?
      bar(title, body, parameters.extraProperty); // ??
   }
}

foo({title: 'Title', body: 'Body', extraProperty: 'This is extra...'});

答案 1 :(得分:0)

如果这是您自己的自定义模块,则可以使用函数覆盖的概念,其中每个子类可以有自己的处理方式,也可以有默认的处理方式。

class Parent {
  constructor(name) {
    this.name = name;
  }
  
  greet() {
    console.log(`Hello ${this.name}`);
  }
}

class Child1 extends Parent {
  constructor(name) {
    super(name);
  }
  
  greet() {
    console.log(`Hey there ${this.name}. This is Child 1`);
  }
}

class Child2 extends Parent {
  constructor(name) {
    super(name);
  }
  
  greet() {
    console.log(`Hi there ${this.name}. This is Child 2`);
  }
}

const o1 = new Child1('Foo')
const o2 = new Child2('Foo')

o1.greet();
o2.greet();

但是,如果您尝试覆盖外部模块中的功能(您无权访问该代码,例如库),我的建议是在其中创建包装器并添加功能。