扩展Node.js类时的大括号

时间:2012-09-28 22:14:26

标签: node.js coffeescript

为什么在扩展Node.js类时我们将变量包装在花括号中,如{EventEmitter} = require 'events'

例如,Trevor Burnham在他的tutorial事件驱动的CoffeeScript中以这种方式扩展了Node的EventEmitter:

{EventEmitter} = require 'events'

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

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

1 个答案:

答案 0 :(得分:43)

此:

{EventEmitter} = require 'events'

相当于这个JavaScript:

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

当您require 'events'时,您正在使用模块的导出返回一个对象,其中一个导出是EventEmitter“类”。使用{EventEmitter}只是将EventEmitterrequire 'events'返回的对象中拉出来的惯用快捷方式;你也可以这样说:

EventEmitter = require('events').EventEmitter

如果你愿意的话。当您想要提取对象的多个部分时,支撑版本开始派上用场;例如,这个:

{a, b} = c

就像这个JavaScript:

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

CoffeeScript文档的Destructuring Assignment部分现在可以正确地阅读。