2013-02-12 194 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