l'héritage de classe CoffeeScript
-
30-09-2019 - |
Question
Je suis en train de comprendre comment fonctionne l'héritage dans coffeescript. Voici un exemple simplifié de mon code:
class Parent
constructor: (attrs) ->
for own name,value of attrs
this[name] = value
Parent.from_json_array = (json, callback) ->
for item in JSON.parse(json)
obj = new ChildA item # [1]
callback obj
class ChildA extends Parent
class ChildB extends Parent
ChildA.from_json_array("[{foo: 1}, {foo: 2}]") (obj) ->
console.log obj.foo
Que dois-je mettre sur la [1]
ligne marquée à utiliser ici la classe enfant correcte? Cela fonctionne, mais seulement crée des objets avec un prototype de ChildA
. J'ai essayé quelque chose comme:
Parent.from_json_array = (json, callback) ->
klass = this.prototype
for item in JSON.parse(json)
obj = klass.constructor item # [1]
callback obj
... mais cette feuille obj
comme non défini dans ma fonction de rappel (TypeError:. Impossible de lire la propriété 'foo' undefined »
Quelle est la conjuration magique en CoffeeScript pour pouvoir créer un nouvel objet d'une classe, où la classe est variable?
La solution
Nevermind j'ai tout compris:
Parent.from_json_array = (json, callback) ->
klass = this
for item in JSON.parse(json)
obj = new klass item
callback obj
Il se trouve que vous pouvez juste new
une classe stockée dans une variable. Je pensais avoir essayé cela avant, mais devenais une erreur de syntaxe.