2012-09-28 28 views
27

Perché le variabili vengono racchiuse tra parentesi graffe, come {EventEmitter} = require 'events', quando si estende una classe Node.js?Parentesi graffe durante l'estensione della classe Node.js

Per esempio, Trevor Burnham, nel suo tutorial su CoffeeScript Event-Driven, estende EventEmitter del nodo in questo modo:

{EventEmitter} = require 'events' 

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

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

risposta

43

questo:

{EventEmitter} = require 'events' 

è equivalente a questo JavaScript:

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

Quando si require 'events', si ottiene una o respingiamo con le esportazioni del modulo, una di quelle esportazioni è la "classe" EventEmitter. Utilizzare {EventEmitter} è solo una scorciatoia idiomatica per estrarre EventEmitter dall'oggetto restituito da require 'events'; si potrebbe anche dire questo:

EventEmitter = require('events').EventEmitter 

se si preferisce. La versione rinforzata inizia ad essere utile quando si desidera estrarre più di una parte di un oggetto; per esempio, questo:

{a, b} = c 

è come questo JavaScript:

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

La sezione Destructuring Assignment della documentazione CoffeeScript potrebbe fare qualche buona lettura proprio in questi giorni.

Problemi correlati