Nawiasy klamrowe (nawiasy klamrowe) w instrukcji Node.js „require”

97

Próbuję zrozumieć różnicę między dwoma stwierdzeniami „wymagaj” poniżej.

A konkretnie, jaki jest cel { }owijanych wokół tekstu ipcMain?

const electron = require('electron')

const {ipcMain} = require('electron')

Oba wydają się przypisywać zawartość electronmodułu, ale oczywiście działają inaczej.

Czy może ktoś rzucić nieco światła?

AproposArmadillo
źródło

Odpowiedzi:

142

Drugi przykład wykorzystuje destrukturyzację.

Spowoduje to wywołanie określonej zmiennej (w tym funkcji), które są eksportowane z wymaganego modułu.

Na przykład (functions.js):

module.exports = {
   func1,
   func2
}

jest zawarte w twoim pliku:

const { func1, func2 } = require('./functions')

Teraz możesz dzwonić do nich indywidualnie,

func1()
func2()

w przeciwieństwie do:

const Functions = require('./functions')

są wywoływane przy użyciu notacji kropkowej:

Functions.func1()
Functions.func2()

Mam nadzieję że to pomoże.

Możesz przeczytać o destrukturyzacji tutaj , jest to bardzo przydatna część ES6 i może być używana zarówno z tablicami, jak i obiektami.

alexi2
źródło
19

Wraz const electron = require('electron')z ipcMainmodułem będzie dostępny jako electron.ipcMain.

Z const {ipcMain} = require('electron')tym ipcMainmodule będzie dostępny ipcMain.

Ta konstrukcja nazywa się destrukturyzacją obiektów i osiąga to samo, co konstrukcja Pythona

from library import ...

W swojej podstawowej formie pozwala bezpośrednio odwołać się do właściwości obiektu:

var o = {prop1: '1', prop2: 2}
var {prop1, prop2} = o
console.log(prop1) // '1' (same as o.prop1)
console.log(prop2) // 2 (same as o.prop2)

Czek:

const {ipcMain} = require('electron')
const myElectron = require('electron')
const myipcMain = myElectron.ipcMain
console.log(myipcMain===ipcMain) // true

Możesz użyć przypisania destrukturyzacji, aby zaimportować wiele właściwości obiektu JavaScript, np .:

const { app, BrowserWindow, ipcMain } = require('electron')

Jeśli użyjesz właściwości, która nie istnieje, zostanie ona ustawiona na undefinedi nie pojawi się błąd.

const {app, BrowserWindow, ipcMain, doesntExist} = require('electron')
console.log(doesntExist) // undefined

Zobacz także: Co robią nawiasy klamrowe w var { … } = …zdaniach?

user2314737
źródło