2012-09-28 18 views
27

Warum werden die Variablen in geschweifte Klammern eingeschlossen, wie {EventEmitter} = require 'events', wenn eine Node.js-Klasse erweitert wird?Geschweifte Klammern beim Erweitern der Node.js-Klasse

Zum Beispiel Trevor Burnham, in seiner tutorial auf Ereignisgesteuerte Coffeescript erweitert Knotens EventEmitter auf diese Weise:

{EventEmitter} = require 'events' 

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

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

Antwort

43

Dieses:

{EventEmitter} = require 'events' 

entspricht diesem JavaScript:

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

Wenn Sie require 'events', erhalten Sie eine o zurück mit den Exporten des Moduls, einer dieser Exporte ist die EventEmitter "Klasse". Die Verwendung von {EventEmitter} ist nur eine idiomatische Abkürzung für das Ziehen von EventEmitter aus dem Objekt, das require 'events' zurückgibt; Sie könnten auch folgendes sagen:

EventEmitter = require('events').EventEmitter 

wenn Sie bevorzugen. Die versteifte Version beginnt sich als nützlich zu erweisen, wenn Sie mehr als einen Teil eines Objekts extrahieren möchten. zum Beispiel diese:

{a, b} = c 

ist wie dieses JavaScript:

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

Der Destructuring Assignment Abschnitt der Dokumentation Coffee könnten einige gute Lektüre jetzt recht machen.

Verwandte Themen