调用coffescript超级方法

pis*_*hio 32 coffeescript

我有以下代码:

    class Animal
        constructor: (@name) -> 
        say: () -> console.log "Hello from animal called #{ @name }"

    class Dog extends Animal

        say: () ->
            super.say()
            console.log "Hello from dog called #{ @name }"

    a = new Animal('Bobby')
    a.say()

    d = new Dog("Duffy")
    d.say()            
Run Code Online (Sandbox Code Playgroud)

结果不是

Hello from animal called Bobby
Hello from animal called Duffy
Hello from dog called Duffy
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

Hello from animal called Bobby
Hello from animal called Duffy
Uncaught TypeError: Cannot call method 'say' of undefined
Run Code Online (Sandbox Code Playgroud)

为什么超级未定义?如何调用父方法以扩展它?谢谢

pis*_*hio 67

我自己找到了答案,它应该是:

class Dog extends Animal

    say: () ->
        super
        console.log "Hello from dog called #{ @name }"
Run Code Online (Sandbox Code Playgroud)

  • 不要犹豫,将您的答案标记为正确. (5认同)
  • 这不应该是`super()`吗? (3认同)
  • @Ryan_IRL你在调用super时不需要使用`()`.编译器可以告诉你,当你使用`super`关键字时,你正在调用该函数. (2认同)