Как самостоятельно ссылаться на NodeJS Модуль? - PullRequest
1 голос
/ 06 января 2020

У меня есть модуль, который я экспортирую. Мне нужна одна функция для вызова другой функции. Вот упрощенная версия того, что я пытаюсь сделать.

module.exports = {
  isEven: (number) => {
    return (number%2 == 0)
  },
  isTenEven: () => {
    return isEven(10)
  }
}

Приведенный выше код выдает isEven is not defined при вызове moduleName.isTenEven().

Имеет смысл, почему это не удается. Но как бы вы переписали это? (При сохранении шаблона синглтона)

Ответы [ 6 ]

3 голосов
/ 06 января 2020

Сначала определите функции, а затем экспортируйте их:

const isEven = (number) => number % 2 === 0
const isTenEven = () => isEven(10)

module.exports = {
  isEven,
  isTenEven
}
1 голос
/ 06 января 2020

Может просто сделать это? Определите, а затем экспортируйте.

const isEven = number => number % 2 === 0;

module.exports = {
  isEven,
  isTenEven: () => isEven(10)
};
1 голос
/ 06 января 2020

Объект используется только для группировки функций вместе. В этом нет ничего особенного, поэтому определите функции отдельно. Построить объект в конце.

const isEven = number => number % 2 === 0;
const isTenEven = () => isEven(10);
module.exports = { isEven, isTenEven };
0 голосов
/ 06 января 2020

Если вы можете позволить себе Babel или версию Node.js, которая поддерживает операторы импорта / экспорта, вы также можете сделать:

export const isEven = num => num % 2 === 0;
export const isTenEven = () => isEven(10);
0 голосов
/ 06 января 2020

Просто чтобы добавить еще одно решение в смесь. Вам не нужно определять функцию в другом месте. Поскольку объявление объекта завершается до вызова функции, вы можете обратиться к нему через module.exports или exports, например:

module.exports = exports = {
  isEven: (number) => {
    return (number%2 === 0)
  },
  isTenEven: () => {
    return exports.isEven(10)
  }
}

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

0 голосов
/ 06 января 2020

Внутри JS литерал объекта с использованием this относится к самому объекту, поэтому вы можете иметь:

module.exports = {
  isEven: (number) => {
    return (number%2 == 0)
  },
  isTenEven: function () {
    return this.isEven(10)
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...