2012-09-28 81 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的文档的部分可能使一些很好的阅读一下吧。