2012-09-28 136 views
27

爲什麼在擴展Node.js類時,我們將變量包裹在大括號中,如{EventEmitter} = require 'events'擴展Node.js類時的大括號

例如,特雷弗·伯納姆在他的事件驅動的CoffeeScript tutorial,擴展節點的EventEmitter這樣:

{EventEmitter} = require 'events' 

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

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

回答

43

此:

{EventEmitter} = require 'events' 

相當於這個JavaScript:

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

當你require 'events',你會得到一個o與模塊的出口相反,其中一個出口是EventEmitter「班級」。使用{EventEmitter}只是將EventEmitter拉出require 'events'返回對象的慣用快捷方式;你也可以這樣說:

EventEmitter = require('events').EventEmitter 

如果你願意。當你想要提取一個對象的多個部分時,支撐版本開始派上用場;例如,這樣的:

{a, b} = c 

是這樣的JavaScript:

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

Destructuring Assignment的CoffeeScript的文檔的部分可能使一些很好的閱讀一下吧。