Supongo que solo responderé mi propia pregunta. La forma en que terminé manejando esto es extendiendo todas mis clases desde una clase que llamo "SuperClass" (el nombre no importa). De esa clase puedo extender cualquier cantidad de clases. De todos modos la clase tiene este aspecto
moduleKeywords = ['included', 'extended']
class SuperClass
@include: (obj) ->
throw('include(obj) requires obj') unless obj
for key, value of obj.prototype when key not in moduleKeywords
@::[key] = value
included = obj.included
included.apply(this) if included
@
prácticamente sólo se lo robó a Spine. Un ejemplo de una clase extendida desde SuperClass:
class Sidebar extends SuperClass
# Include some other classes
@include Controller
@include EventEmitter
###
Constructor function
###
constructor: ->
# Call extended constructors
Controller.call @
EventEmitter.call @
console.log 'Sidebar instantiated'
Tenga en cuenta que para llamar al constructor de la clase heredada la función de clase se llama con @
/this
como contexto. No he necesitado para ampliar las funciones de clase todavía, pero me imagino que es muy similar a una llamada al constructor padre:
someFunction: ->
ExtendedClass::someFunction.call @
favor editar este post si estoy equivocado. También pido disculpas por mi falta de terminología de la herencia de clases - No soy un experto
Actualización: También se podría definir un constructor de superclase que llama automáticamente al constructor para todas las clases incluidas en la instanciación. De esta forma, solo necesita llamar al super()
desde la subclase. No me he molestado con eso aunque
se puede echar un vistazo a esta discusión: https://github.com/ jashkenas/coffee-script/issues/452 – qiao
espuma ... Eso no es un buen augurio para mí – Hubro
JavaScript usa prototipo de herencia ... Detrás de la escena, extends utiliza la propiedad única 'prototipo' para crear una cadena ... usted puede tener "hereda" f rom múltiples objetos solo si los objetos son una cadena de prototipos ... p. Zebra podría extender VegetarianAnimal y vegetarianAnimal extends Animal. – Jaider