Domanda

Sto cercando di capire come l'ereditarietà funziona in CoffeeScript. Ecco un esempio semplificato del mio codice:

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

Di cosa ho bisogno di mettere sulla linea segnata [1] di utilizzare la classe figlia corretta qui? Questo funziona, ma crea solo oggetti con un prototipo di ChildA. Ho provato qualcosa di simile:

Parent.from_json_array = (json, callback) ->
  klass = this.prototype
  for item in JSON.parse(json)
    obj = klass.constructor item  # [1]
    callback obj

... ma questo foglie obj come indefinito nella mia funzione di callback (TypeError:. Non è possibile leggere la proprietà 'pippo' di non definito"

Che cosa è l'incantesimo magico in CoffeeScript per essere in grado di creare un nuovo oggetto di una classe, dove la classe è variabile?

È stato utile?

Soluzione

Nevermind, ho capito:

Parent.from_json_array = (json, callback) ->
  klass = this
  for item in JSON.parse(json)
    obj = new klass item
    callback obj

Si scopre che si può solo new una classe memorizzato in una variabile. Ho pensato che avevo provato prima, ma è stato sempre un errore di sintassi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top