coffeescript教學 - coffeescript缺點




靜態方法和Coffeescript中的繼承 (2)

我一直在讀一些關於咖啡標記的繼承模式,我感覺我正處在一個我不了解的意識形態辯論的邊緣。 所以,我會很高興地發現,我只是在做錯誤的方式。

基本上我正在做的是編寫一些小部件,其中包括需要處理DOM元素上的事件。 我認為一個很好的方法去做這個事情就是有一個類方法,這個方法會被調用一次,委託widget可能需要的所有事件。 基礎小部件類可能有一些簡單的點擊處理程序,而子類可能會添加到一些鼠標懸停處理程序或額外的點擊處理程序。

然而,看起來我不應該嘗試在靜態方法中調用super() 。 有一個解決方法存在,( this.__super__.constructor.METHODNAME()但我看到了很多的建議,這不是我想要做的最好的方法。有沒有人有任何見解我應該如何構建這個代碼?繼續使用變通方法,或者把所有的委託放到一個完全不同的地方?我不能把它粘在原型中,因為我不一定有一個實例調用方法或者我基本上仍然可以從靜態的上下文中調用原型的方法,比如將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()

謝謝你的幫助。


我不明白為什麼delegateEvents是一個類級別的方法,或者為什麼必須從SwatchableWidget.delegateEvents再次調用SwatchableWidget.delegateEvents 。 如果只是類初始化代碼,你應該直接把它放在類體中:

class Widget
    console.log "delegate some generic events"
    ...
    @testProp: "ThemeWidget"

class SwatchableWidget extends Widget
    console.log "delegate some specific swatchable widget events"
    ...
    @testProp2 = "SwatchWidget"

我認為你在運行這個初始化代碼之前等待一個特定的DOM狀態? 也許我可以建議另一種方法,如果你告訴了我一些關於delegateEvents的先決條件。


我建議更換

this.__super__.constructor.delegateEvents()

Widget.delegateEvents()

試圖使用超級調用靜態方法是不需要的(並沒有多大意義)







coffeescript