Функции прототипа высокого уровня - PullRequest
0 голосов
/ 14 ноября 2018

Я пытаюсь создать оболочку в nodejs, которая абстрагирует различные функции в зависимости от ввода основной оболочки. Например, предположим, у меня есть два разных файла, один с именем usa и один с именем uk, и оба имеют одинаковые функции, но имеют разные функции. Я пытаюсь написать функцию, которая с учетом строки us или uk, я получаю функцию-обертку, которую я могу вызвать следующим образом:

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, я должен делать то же самое, что и в первом фрагменте кода. Таким образом, он является прототипом для каждого модуля, а не на высоком уровне, где он будет на строку (т. Е. Ук / сша).

Я пытаюсь сделать только один файл index.js в моей папке упаковщиков, который отвечает за предоставление мне одного упаковщика для всех модулей. Что-то вроде MyWrapper('uk').feed.func1()

Это довольно сложный вопрос для объяснения, но я был бы рад отредактировать сообщение для получения дополнительных разъяснений, если это необходимо.

1 Ответ

0 голосов
/ 14 ноября 2018

Почему бы просто не вернуть обычные объекты?

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

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

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

Может использоваться как:

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