2013-02-12 246 views
3

在CoffeeScript中,當您實例化子類時,似乎沒有調用超類構造函數。CoffeeScript,原型繼承和構造函數

有沒有辦法解決這個問題?

下面是一個例子:

class A 
    element = null 

    constructor: -> 
     element = document.createElement "div" 

    hide: => 
     element.style.display = "none" 

class B extends A 
    constructor: -> 
     @hide() #error! 

我期望的A構造函數首先調用,然後B的構造。如果B然後調用hide方法,它應該隱藏在A的構造函數中創建的元素,而不是說element爲空。

謝謝!

+0

我同意這似乎是在CoffeeScript中的錯誤。你有沒有爲它創建一個問題? – 2014-07-05 18:51:38

回答

5

我認爲你需要調用超在子類

class A 
    element = null 

    constructor: -> 
     element = document.createElement "div" 

    hide: => 
     element.style.display = "none" 

class B extends A 
    constructor: -> 
     super 
     @hide() #error! 
+0

文檔:http://coffeescript.org/#classes – 2013-02-12 20:16:00

+0

是的,我嘗試過,但它似乎將它複製到'B',擊敗原型鏈的目的。我錯了嗎? – tau 2013-02-12 20:16:28

+0

我必須承認,我從來沒有看過生成的__extends函數,但它似乎確實創建了正確的原型鏈。 – robkuz 2013-02-12 20:21:28