【问题标题】:What does {app, BrowserWindow} means in JavaScript (node.js)?JavaScript (node.js) 中的 {app, BrowserWindow} 是什么意思?
【发布时间】:2017-06-24 05:03:47
【问题描述】:

在阅读使用electron制作软件的文档时,我在index.js文件(通常开始执行的文件)的开头遇到了这种类型的代码

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

{app, BrowserWindow}(语法,而不是关键字)的真正含义是什么?它是 JavaScript 语法,还是 node.js 的东西,还是与电子相关的东西?

【问题讨论】:

  • object destructuring assignment - 这是“新的”javascript(换句话说,ES2015+)
  • 基本上只是写得更短。代替const eletron = require('electron'); 和以后使用electron.app,它允许您只输入app。我个人避免这种类型的构造,因为 2 个导入的模块可以导出相同的属性,而您将无法做到:const {utils} = require('module1'); const {utils} = require('module2');

标签: javascript node.js electron


【解决方案1】:

这种语法称为“对象解构”,它是最新版本的 JavaScript(JavaScript2015 aka ECMAScript 6/ES6)的一个功能 - appBrowserWindow 只是您想要的 electron 的特定部分在应用程序的这一部分中使用。

这是一种简化代码并轻松引用依赖项关键部分的方法。

这是来自https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment的一个非常基本的示例

var o = {p: 42, q: true};
var {p, q} = o;

console.log(p); // 42
console.log(q); // true

所以在你的情况下,electron 是一个导入的模块,看起来像(同样,这里过于简单化了):

var electron = {
    app: {
        greet: () => {
            console.log("Hello, world!")
        }
    },
    BrowserWindow: {/* some other stuff */},
    anotherMethod: {/* other stuff, which we will ignore in your app */}
}

module.exports electron

然后在你的应用中,你导入这个模块,你可以直接引用导入的属性:

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

app.greet()
// "Hello, world!"

同样,您可以引用 BrowserWindow... 但是,如果不将 anotherMethod 包含在解构赋值中,您将无法引用它。

希望对您有所帮助。

【讨论】:

  • 还值得考虑的是,当解构赋值从对象中“拉”出所需的“成员”时,它也会为它们创建局部变量。然后可以更改“解构成员”(除非声明为 const 像这里一样)
  • 只是在这里让您知道此语法在 json 文件上也有效,例如:const {version, name} = require('./package.json')
【解决方案2】:

我只想指出(因为 OP 想知道解构对什么有用),您问题中的陈述相当于:

const electron = require('electron')
const app = electron.app
const BrowserWindow = electron.BrowserWindow

但是,使用对象解构,它变得更加简洁,并省去了const electron 的不必要声明:

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

这就是我经常使用它的原因。

【讨论】:

    猜你喜欢
    • 2017-06-11
    • 2013-11-02
    • 2015-07-15
    • 2018-07-17
    • 1970-01-01
    • 2011-04-16
    • 2011-06-20
    • 2011-11-01
    • 1970-01-01
    相关资源
    最近更新 更多