Node.js'require'语句中的花括号(大括号)


94

我试图理解下面两个“ require”语句之间的区别。

具体来说,{ }s包装的目的是什么ipcMain

const electron = require('electron')

const {ipcMain} = require('electron')

它们似乎都分配了electron模块的内容,但是它们的功能显然不同。

谁能阐明一些想法?

Answers:


134

第二个示例使用解构。

这将调用从所需模块导出的特定变量(包括函数)。

例如(functions.js):

module.exports = {
   func1,
   func2
}

包含在您的文件中:

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

现在您可以分别给他们打电话了,

func1()
func2()

相对于:

const Functions = require('./functions')

用点表示法调用:

Functions.func1()
Functions.func2()

希望这可以帮助。

您可以在此处了解有关销毁的信息,它是ES6的非常有用的一部分,可以与数组以及对象一起使用。


18

使用const electron = require('electron'),该ipcMain模块将以形式提供electron.ipcMain

const {ipcMain} = require('electron')ipcMain模块一起提供ipcMain

这种构造称为对象解构,其实现与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 { … } = …什么?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.