web-dev-qa-db-ja.com

ノードrequireステートメントの波括弧(中括弧)

以下の2つのrequireステートメントの違いを理解しようとしています。

具体的には、ipcMainの周りにラップされた{ }sの目的は何ですか?

const electron = require('electron')

const {ipcMain} = require('electron')

それらは両方とも電子モジュールの内容を割り当てるように見えますが、明らかに異なって機能します。

誰でも光を当てることができますか?

72
Shaffanhoon

2番目の例では、構造化を使用しています。

これにより、必要なモジュールからエクスポートされた特定の変数(関数を含む)が呼び出されます。

例(functions.js):

module.exports = {
   func1,
   func2
}

ファイルに含まれています:

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

これで、個別に呼び出すことができます。

func1()
func2()

とは対照的に:

const Functions = require('./functions')

ドット表記を使用して呼び出されます:

Functions.func1()
Functions.func2()

お役に立てれば。

here の破壊について読むことができます。これはES6の非常に有用な部分であり、オブジェクトだけでなく配列でも使用できます。

105
alexi2

const electron = require('electron')を使用すると、ipcMainモジュールは_electron.ipcMain_として利用可能になります。

const {ipcMain} = require('electron')を使用すると、ipcMainモジュールがipcMainとして使用可能になります。

このコンストラクトは object destructuring と呼ばれ、Pythonコンストラクトと同じものを実現します

_from library import ...
_

基本的な形式では、オブジェクトのプロパティを直接参照できます

_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)
_

小切手:

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

分割割り当てを使用して、Javascriptオブジェクトの複数のプロパティをインポートできます。例:

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

存在しないプロパティを使用する場合、これはundefinedに設定され、エラーは発生しません。

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

参照: _var { … } = …_文の中括弧は何をしますか?

6
user2314737