2

次の 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')  # ?

ありがとうございました!

4

2 に答える 2

4

コンストラクターから関数を返す必要があります。コンストラクターは、現在のインスタンスのプロパティで拡張されています(これはから継承されますEvent.prototype)。

class Event
    constructor : ->
        shortcut = -> shortcut.trigger(arguments...)
        for key, value of @
            shortcut[key] = value
        return shortcut

    trigger : (args...) =>
        ...

    bind : (args...) =>
        ...

コンパイル結果

于 2012-10-15T11:04:32.330 に答える
1

https://gist.github.com/shesek/4636379を確認してください。それはあなたがそのようなものを書くことを可能にします:

Event = callable class
    trigger : (args...) =>
        ...
    bind : (args...) =>
        ...

    callable: @::trigger

注: これは (関数の [[Prototype]] を設定する他の方法がない) に依存している__proto__ため、IE で動作させる必要がある場合は使用しないでください。ユーザーが IE を使用しないことがわかっている場合は、サーバー側のコードとイントラネット プロジェクトに使用します。

于 2013-03-04T23:55:17.227 に答える