Подтвердить что ты не робот

Кудрявые скобки при расширении Node.js Класс

Почему мы переносим наши переменные в фигурные скобки, например {EventEmitter} = require 'events', при расширении класса Node.js?

Например, Тревор Бернем, в своем учебнике на Event-Driven CoffeeScript, расширяет Node EventEmitter следующим образом:

{EventEmitter} = require 'events'

class Rooster extends EventEmitter
  constructor: ->
    @on 'wake', -> console.log 'COCKADOODLEDOO!'

(foghorn = new Rooster).emit 'wake' # COCKADOODLEDOO!
4b9b3361

Ответ 1

Это:

{EventEmitter} = require 'events'

эквивалентен этому JavaScript:

var EventEmitter;
EventEmitter = require('events').EventEmitter;

Когда вы require 'events', вы возвращаете объект обратно при экспорте модуля, одним из таких экспорта является EventEmitter "class". Использование {EventEmitter} - это просто идиоматический ярлык для вытягивания EventEmitter из объекта, возвращаемого require 'events'; вы также можете сказать следующее:

EventEmitter = require('events').EventEmitter

если вы предпочитаете. Скошенная версия начинает пригодиться, когда вы хотите извлечь более одной части объекта; например, это:

{a, b} = c

похож на этот JavaScript:

var a, b;
a = c.a;
b = c.b;

Раздел Destructuring Assignment в документации CoffeeScript может сделать хорошее чтение прямо сейчас.