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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top