假设我有一个像这样的对象(使用coffeescript):
class Client
constructor: (socket) ->
@id = socket.id
@socket = socket
# some other initialization here...
现在,只要@socket发出一些东西,我希望客户端对象通过发出相同的事件来模仿它。我想不出更好的方法来做到这一点,而不仅仅是观察@socket发出的每一个事件并在Client类中手动发出它,即:
class Client
constructor: (socket) ->
# ...
@socket.on('disconnection', onDisconnect)
@socket.on('message', onMessage)
onDisconnect: ->
this.emit('disconnection')
onMessage: (data) ->
this.emit('message', data)
我知道必须有更好的方法,但我不知道该怎么做。
答案 0 :(得分:0)
这样的东西? (未测试)。
class Client
constructor: (socket) ->
# ...
for event in ['disconnect', 'message']
@socket.on(event, => @emit(event, arguments))
答案 1 :(得分:0)
Monkey-patch @socket
对象发出:
class Client
constructor: (socket) ->
@reEmit(socket)
reEmit: (ee)->
oldEmit = ee.emit
ee.emit = (args...)=>
@emit(args)
oldEmit.apply(ee, args)