2012-05-24 7 views
11
class RedGuy 
     constructor : (@name) -> 
      @nameElem = $ @name 
      @nameElem.css color : red 

class WideRedGuy extends RedGuy 
     constructor : -> 
      @nameElem.css width : 900 

jeff = new WideRedGuy '#jeff' 

me gustaría #jeff a ser a la vez rojo y amplia, pero siempre me sale this.name is undefined. ¿Cómo puedo extender el constructor (append?) Para que tenga acceso a las propiedades del objeto original?CoffeeScript extienden constructor de la clase

Respuesta

16

Debe llamar explícitamente al super para que esto funcione. Llamar al super en WideRedGuy llamará al constructor RedGuy, después de lo cual @nameElem se definirá correctamente. Para una explicación más detallada, debe consultar coffeescript's documentation al respecto.

class RedGuy 
     constructor : (@name) -> 
      @nameElem = $ @name 
      @nameElem.css color : red 

class WideRedGuy extends RedGuy 
     constructor : -> 
      ## This line should fix it 
      super # This is a lot like calling `RedGuy.apply this, arguments` 
      @nameElem.css width : 900 

jeff = new WideRedGuy '#jeff' 
+3

OMG, he estado luchando por entender 'super' y ahora lo entiendo completamente. Muchas gracias! – Fresheyeball

+0

@Fresheyeball contento de ayudar! – benekastah

Cuestiones relacionadas