为什么在扩展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!
答案 0 :(得分:43)
此:
{EventEmitter} = require 'events'
相当于这个JavaScript:
var EventEmitter;
EventEmitter = require('events').EventEmitter;
当您require 'events'
时,您正在使用模块的导出返回一个对象,其中一个导出是EventEmitter
“类”。使用{EventEmitter}
只是将EventEmitter
从require 'events'
返回的对象中拉出来的惯用快捷方式;你也可以这样说:
EventEmitter = require('events').EventEmitter
如果你愿意的话。当您想要提取对象的多个部分时,支撑版本开始派上用场;例如,这个:
{a, b} = c
就像这个JavaScript:
var a, b;
a = c.a;
b = c.b;
CoffeeScript文档的Destructuring Assignment部分现在可以正确地阅读。