Devinez Je vais juste répondre à ma propre question. La façon dont j'ai fini par gérer ceci est d'étendre toutes mes classes d'une classe que j'appelle "SuperClasse" (le nom n'a pas d'importance). De cette classe je peux étendre n'importe quel nombre de classes. Quoi qu'il en soit la classe ressemble à ceci
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
@
Quasiment juste volé de Spine. Un exemple d'une classe étendue de 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'
Notez que pour appeler le constructeur de la classe héritée de la fonction de la classe est appelée avec @
/this
comme contexte. Je ne l'ai pas eu besoin d'étendre encore, mais j'imagine que c'est très semblable fonctions de classe pour appeler le constructeur parent:
someFunction: ->
ExtendedClass::someFunction.call @
S'il vous plaît modifier ce poste si je me trompe. Aussi s'il vous plaît excuser mon manque de terminologie de l'héritage de classe - Je ne suis pas expert
Mise à jour: On peut également définir un constructeur de superclasse appelée automatiquement le constructeur pour toutes les classes incluses sur instanciation. De cette façon, vous devrez juste appeler super()
de la sous-classe. Je ne ai pas dérangé avec cela si
vous pouvez jeter un oeil à cette discussion: https://github.com/ jashkenas/coffee-script/issues/452 – qiao
suds ... Ça ne me dit rien de bon – Hubro
JavaScript utilise l'héritage du prototype ... Derrière la scène, extends utilise la propriété 'prototype' pour créer une chaîne ... peut avoir "hérite" f rer plusieurs objets uniquement si les objets sont une chaîne prototype ... p. ex. Zèbre pourrait étendre végétarienAnimal et végétarienAnimaux étend Animal. – Jaider