考虑以下 CoffeeScript 类:
class Event
trigger : (args...) =>
...
bind : (args...) =>
...
用例是:
message_received = new Event()
message_received.bind(alert)
message_received.trigger('Hello world!') # calls alert('Hello world')
有没有办法以这样的方式编写Event
类,使.trigger(...)
调用具有"可调用对象"快捷方式:
message_received('Hello world') # ?
谢谢!
您需要从构造函数返回一个函数,该函数使用当前实例的属性进行扩展(而当前实例又继承自Event.prototype
)。
class Event
constructor : ->
shortcut = -> shortcut.trigger(arguments...)
for key, value of @
shortcut[key] = value
return shortcut
trigger : (args...) =>
...
bind : (args...) =>
...
编译结果
查看 https://gist.github.com/shesek/4636379。它允许你写这样的东西:
Event = callable class
trigger : (args...) =>
...
bind : (args...) =>
...
callable: @::trigger
注意:它依赖于__proto__
(没有其他方法可以设置函数的[[原型]]),所以如果你需要它在IE上工作,你不应该使用它。当我知道用户不会使用 IE 时,我将它用于服务器端代码和 Intranet 项目。