2012-07-17 19 views
29

tengo el siguiente código:llamar a los métodos súper 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()    

El resultado no es

Hello from animal called Bobby 
Hello from animal called Duffy 
Hello from dog called Duffy 

pero me da el siguiente error:

Hello from animal called Bobby 
Hello from animal called Duffy 
Uncaught TypeError: Cannot call method 'say' of undefined 

¿Cómo es que Super es indefinido ? ¿Cómo llamar a un método padre para extenderlo? Gracias

+0

Su conjetura era mi suposición ... me hace pensar por qué no acaba de hacer que funcione igual que prácticamente todo el mundo adivina lo que debería? Tal vez una discusión interesante – PandaWood

Respuesta

63

he encontrado la respuesta a mí mismo, debe ser:

class Dog extends Animal 

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

No dude en marcar su respuesta como correcta. – TheHippo

+2

¿No debería ser 'super()'? –

+2

@Ryan_IRL no necesita usar '()' al llamar a super. El compilador puede decir que cuando usa la palabra clave 'super' está invocando la función. – grammar

Cuestiones relacionadas