2017-06-24 3 views
2

Während docs macht Software mit electron lesen, stieß ich auf diese Art von Code am Anfang der index.js-Datei (die Datei, in der Regel der Ausführung beginnt)Was bedeutet {App, BrowserWindow} in JavaScript (node.js)?

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

Was bedeutet {app, BrowserWindow} (die Syntax, nicht die Schlüsselwörter) wirklich bedeutet? Ist es eine JavaScript-Syntax oder eine node.js-Sache oder etwas, das ausschließlich mit Elektron zusammenhängt?

+2

[Objekt Destrukturierung Zuordnung] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#Object_destrukturing) - es ist "neu" Javascript (mit anderen Worten, ES2015 +) –

+0

Es ist im Grunde nur kürzer zu schreiben. Anstatt 'const eletron = require ('electron');' und später 'electron.app' zu verwenden, können Sie einfach' app' eingeben. Ich persönlich vermeide diese Art von Konstrukt, weil 2 importierte Module dieselben Eigenschaften exportieren könnten, und das wäre nicht möglich: 'const {utils} = require ('module1'); const {utils} = require ('module2'); ' – Danosaure

Antwort

5

Diese Syntax wird ‚Objekt Destrukturierung‘ genannt, und es ist ein Merkmal der neuesten Version von JavaScript (JavaScript2015 aka ECMAScript 6/ES6) - app und BroswerWindow sind nur bestimmte Teile von electron, die Sie in diesem Abschnitt verwenden mögen von Ihrer Anwendung.

Es ist eine Möglichkeit, Ihren Code zu vereinfachen und kritische Teile einer Abhängigkeit einfach zu referenzieren.

Hier ist ein sehr einfaches Beispiel aus 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 

Also in Ihrem Fall ist electron ein importiertes Modul, das (eine grobe Vereinfachung hier wieder) etwas aussehen würde:

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 

Dann In Ihrer App importieren Sie dieses Modul und Sie können direkt auf die importierten Attribute verweisen:

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

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

Und ähnlich können Sie auf BrowserWindow verweisen ... Sie konnten anotherMethod jedoch nicht referenzieren, ohne es in die Destrukturierungsaufgabe einzubeziehen.

Ich hoffe, das ist hilfreich.

+0

Ich habe es, aber ich frage mich, wie es so nützlich ist! –

+1

Es ist auch eine Überlegung wert, dass die * Destrukturierungszuordnung * die benötigten "members" aus dem Objekt "herauszieht" und lokale Variablen für sie erstellt. Dann könnten die "destrukturierten Mitglieder" geändert werden (sofern nicht wie hier "const" erklärt) – SanjiBukai

+0

Ja, guter Punkt, danke. – skwidbreth

3

Ich möchte nur darauf hinweisen, (weil die OP fragt sich, was Destrukturierung nützlich für ist), dass die Aussage in Ihrer Frage entspricht:

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

jedoch Objekt Destrukturierung verwenden, wird es prägnanter und verlässt die unnötige Erklärung des const electron aus:

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

diesem Grund habe ich es sehr oft.