高级原型功能

时间:2018-11-14 17:01:39

标签: javascript node.js design-patterns prototype wrapper

我正在尝试在nodejs中创建一个包装器,该包装器根据主包装器的输入抽象出不同的功能。例如,假设我有两个不同的文件,一个叫做usa,另一个叫做uk,它们都有相同的功能,但是功能不同。我试图编写一个函数,给定字符串usuk,我得到一个包装函数,可以这样调用:

const Wrapper = MyWrapper('uk')
const func1Output = Wrapper.func1(10)

我目前已完成上述工作,uk文件只是将其中的函数定义为原型,如下所示:

function MyWrapper () { }
MyWrapper.prototype.func1 =  (input) => console.log(input)
return new MyWrapper()

这很好。我目前的情况是,包装程序应该可以访问跨不同文件的许多功能。它不只是func以及该特定文件中的其他内容。这是我的文件夹结构

wrappers
 - feed
  -- uk
  -- us
 - news
  -- uk
  -- us

//etc

每个名为uk / us的文件都具有原型功能,如第二个代码段中所示。因此,例如,每当我想使用feed模块时,都必须在第一个代码段中这样做。因此,它是每个模块的原型,不是每个字符串(即英国/美国)的最高级别。

我想要做的是在wrappers文件夹中只有一个文件index.js,该文件负责为我提供所有模块的一个包装。像MyWrapper('uk').feed.func1()

这是一个很难解释的问题,但如果需要,我很乐意编辑该帖子以进行进一步的说明。

1 个答案:

答案 0 :(得分:1)

为什么不只返回常规对象?

 // wrapper/index.js
 const wrappers = {
  uk: {
   func1() { /*...*/ }
  },

  us: {
   func1() { /*...*/ }
  }
};

module.exports = country => wrappers[country];

可以用作:

  const wrapper = require("./wrapper/")("uk");
 wrapper.func1();