Pregunta

Estoy tratando de averiguar cómo funciona la herencia en CoffeeScript. He aquí un ejemplo simplificado de mi código:

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

¿Qué necesito para poner en la línea marcada [1] utilizar la clase correcta del niño aquí? Esto funciona, pero sólo crea objetos con un prototipo de ChildA. He intentado algo como:

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

... pero esta imagen Hojas obj como no definidos en mi función de devolución de llamada (TypeError:. No se puede leer la propiedad 'foo' de la indefinida"

¿Cuál es el encantamiento mágico en CoffeeScript para poder crear un nuevo objeto de una clase, donde la clase es variable?

¿Fue útil?

Solución

No importa, lo he descubierto:

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

Resulta que sólo puede new una clase almacenada en una variable. Pensé que había intentado esto antes, pero estaba recibiendo un error de sintaxis.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top