var module = require () или const {module} = require ()? - PullRequest
0 голосов
/ 16 февраля 2020

В чем разница между этими двумя требуемыми методами:

1. var xx = require('module')
2. const {xx} = require('module')

Я видел, как в первый раз я могу получить доступ к xx как к переменной, со всеми сценариями, экспортированными модулем ... и второй xx не определен. Как получить доступ ко второму «методу» или это метод, слишком сконструированный для использования модуля {}

спасибо

Ответы [ 4 ]

2 голосов
/ 16 февраля 2020

Первый помещает полный дескриптор модуля в переменную с именем xx.

Второй получает свойство xx из дескриптора модуля и помещает его в переменную с именем xx. Итак, второй будет таким же, как:

const xx = require('module').xx;

Также первый использует var, а второй использует const, но я предполагаю, что вы уже знали об этой разнице.


Сказал по-другому:

Это:

const {xx} = require('module');

является ярлыком для этого:

const xx = require('module').xx;

Это наиболее полезно в качестве ярлыка при использовании require(), когда вы хотите получить кучу свойств из модуля и назначить их все переменным верхнего уровня в вашем модуле следующим образом:

const {xx, yy, zz, aa, bb, cc} = require('module');

, что, очевидно, потребовало бы гораздо больше кода для репликации, чем эта строка, если вы не использовали синтаксис деструктурирования объекта.

FYI, все это всего лишь форма деструктуризация объекта (функция добавлена ​​в Javascript в ES6). Это не что-то конкретное c для require(), просто require() часто возвращает объект с набором свойств, которые его интересуют. См. Эту статью "Мертвая простота в разрушении" для краткого изложения того, что делает деструктурирование объекта.

0 голосов
/ 16 февраля 2020
1. var xx = require('module')
2. const {xx} = require('module')

Во-первых, var - это тип переменной, значение которой можно изменить после определения; значение const не может быть изменено после определенного.

Во-вторых, var xx относится к основному экспорту module; const { xx } относится к свойству экспорта module.


Пример 1. Модуль

const xx = {}
module.exports = xx

Пример 2. Модуль

const xx = {}
const yy = {}
module.exports = {
  xx,
  yy,
}

В противном случае .. .


Пример 1. Модуль

const xx = {}
export default xx

Пример 2. Модуль

const xx = {}
const yy = {}
export default {
  xx,
  yy,
}
0 голосов
/ 16 февраля 2020

Эти два различаются в двух аспектах:

  1. Константа xx: в первом случае добавление оператора xx = 5; является законным, но не во втором случае, поскольку вы объявили xx как const.

  2. Во втором примере вы используете деструктуризацию. Деструктуризация берет элементы из объектов и присваивает их непосредственно переменным. Например:

var a = { "x": 1, "y": 2};

var { y } = a;
// This is equivalent to:
var y = a.y;

Тогда ваше второе утверждение просто берет атрибут xx из вашего модуля, как если бы вы сделали:

const xx = require('module').xx;
0 голосов
/ 16 февраля 2020

Это потому, что ваш модуль экспортируется как объект без метода xxx. Пример:

module.exports ={abc : ()=>{}}
  1. var xx = require ('module'), вы можете вызвать функцию ab c: xxx.ab c ()
  2. только для вас вызов ab c по const {abc} = require ('module'). Вы не можете вызвать xxx в случае 2, потому что нет метода с именем xxx
...