我一直在讀一些關於coffeescript的繼承模型,我感覺到我處於意識形態辯論的邊緣,我真的不明白。所以,我會非常高興地發現我只是以錯誤的方式做事。Coffeescript中的靜態方法和繼承
基本上我正在做的是編寫一組窗口小部件,其中包括需要處理其DOM元素上的事件。我認爲一個很好的方法去做這件事,那就是有一個可以調用一次的類方法來委託widget可能需要的所有事件。基礎小部件類可能有一些簡單的點擊處理程序,而子類可能會添加一些鼠標懸停處理程序或額外的點擊處理程序。
但是,看起來我不應該試圖在靜態方法內調用super()
。有一個解決方法存在,但我已經看到很多建議,這不是做我想做的最好的方法。有沒有人有任何見解我應該如何構造這段代碼?Keep使用變通方法,還是把所有的委託放到一個完全不同的地方?我不能真的把它粘在原型中,因爲我不一定有一個實例調用該方法(或者我基本上仍然可以調用一個方法?在原型從靜態上下文,就像把SwatchableWidget.prototype.delegateEvents()
成一個onload函數或東西
下面是一些代碼來說明什麼我談論:
class Widget
@testProp: "ThemeWidget"
@delegateEvents: ->
console.log "delegate some generic events"
class SwatchableWidget extends Widget
@testProp2 = "SwatchWidget"
@delegateEvents: ->
console.log "delegate some specific swatchable widget events"
this.__super__.constructor.delegateEvents()
Widget.delegateEvents()
SwatchableWidget.delegateEvents()
感謝您的HEL頁。
我喜歡這個,但隨後每派生類將需要顯式調用它的父類的代表事件。如果每個父類名稱都被更改,則需要手動更新委託事件和類似的調用。重讀我自己的回答,我仍然不知道一個乾淨的方式來自動調用父類中的命名函數,超出了原作者的建議。 –