2014-02-11 69 views
0

我已經開始使用Coffeescript最近,我不完全掌握類。我嘗試使用上Coffeescript.org教程,這就是我想出了:Coffeescript類

class Item 
    constructor: (@name, @description) -> 

    add:() -> 
     $itemsBox.append("<p class='center item #{@name}'>#{@name}</p>") 

    remove:() -> 
     $itemsBox.remove($("##{@name}")) 

class permanentItem extend Item 


    add:() -> 
     super() 

    remove:() -> 
     super() 

class permanentUsableItem extend Item 
    @used: false 
    @active: true 

    add:() -> 
     super() 
     $useItemSelection.append("<option value='#{@name}'>#{@name}</option>") 

    remove:() -> 
     $("#useItemSelection option[value='#{@name}']").remove() 

class usableItem extend Item 
    @numberHeld: 0 
    @active: false 

    add:() -> 
     $itemsBox.append("<p class='center item #{@name}'>#{@name} x#{@numberHeld}</p>") 
     $useItemSelection.append("<option value='#{@name}'>#{@name}</option>") 

    remove:() -> 
     if @numberHeld is 0 
      super() 
      $("#useItemSelection option[value='#{@name}']").remove() 
     else 
      @numberHeld -= 1 

誰能告訴我,如果這是正確的,將所有的#{@name}的工作的罰款,並沒有超僅指回在父類中具有相同名稱的方法?

+1

看起來很好,乍一看。你遇到問題還是有某種具體問題?如果不是,不幸的是,這個問題將被視爲這個網站的主題。 –

+0

究竟是什麼問題?上述不符合你的期望? –

+0

我還沒有編譯它,但我對super的使用感到困惑,而且我認爲提出其他一些問題是適當的。 – LukeK

回答

0

我沒有業力來添加此作爲評論,所以我將它添加爲一個答案,而不是。以下是你可能想知道的幾件事情:

  1. 的關鍵詞是extends,不只是extend

  2. $itemsBox$useItemSelection全局變量?我不知道他們在哪裏定義。

  3. 使用@foo語法的任何方法(構造函數除外)均應聲明爲「胖箭頭」=>@foo相當於this.foo,並且=>版本是唯一將this綁定到正確對象(您的類的特定實例)的版本。

  4. 我覺得這個慣例是使用CamelCaseWithALeadingCapital作爲類名,所以你應該有class UsableItem而不是class usableItem,但這只是個人品味的問題。

除此之外,我認爲你的代碼看起來像會起作用。

請注意,如果您只想執行語法檢查或查看爲CoffeeScript生成的JavaScript,則可以轉至http://coffeescript.org/並單擊「Try CoffeeScript」選項卡。