วงเล็บปีกกา (วงเล็บปีกกา) ในคำสั่ง 'ต้องการ' ของ Node.js


95

ฉันกำลังพยายามทำความเข้าใจความแตกต่างระหว่างข้อความ 'ต้องการ' สองข้อความด้านล่าง

โดยเฉพาะจุดประสงค์ของการ{ }พันรอบipcMainคืออะไร?

const electron = require('electron')

const {ipcMain} = require('electron')

ดูเหมือนว่าทั้งสองจะกำหนดเนื้อหาของelectronโมดูล แต่เห็นได้ชัดว่าทำงานต่างกัน

ใครช่วยส่องบ้าง

คำตอบ:


135

ตัวอย่างที่สองใช้การทำลายโครงสร้าง

สิ่งนี้จะเรียกตัวแปรเฉพาะ (รวมถึงฟังก์ชัน) ที่ส่งออกจากโมดูลที่ต้องการ

ตัวอย่างเช่น (functions.js):

module.exports = {
   func1,
   func2
}

รวมอยู่ในไฟล์ของคุณ:

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

ตอนนี้คุณสามารถโทรหาทีละรายการ

func1()
func2()

ตรงข้ามกับ:

const Functions = require('./functions')

เรียกว่าโดยใช้สัญกรณ์จุด:

Functions.func1()
Functions.func2()

หวังว่านี่จะช่วยได้

คุณสามารถอ่านเกี่ยวกับการทำลายโครงสร้างได้ที่นี่ซึ่งเป็นส่วนที่มีประโยชน์มากของ ES6 และสามารถใช้กับอาร์เรย์และวัตถุได้


19

ด้วยconst electron = require('electron')ที่โมดูลจะสามารถเป็นipcMainelectron.ipcMain

ด้วยโมดูลจะสามารถเป็นconst {ipcMain} = require('electron')ipcMainipcMain

โครงสร้างนี้เรียกว่าการทำลายโครงสร้างวัตถุและบรรลุเช่นเดียวกับโครงสร้าง 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 { … } = …งบทำอะไร?

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.