herencia de clases CoffeeScript
-
30-09-2019 - |
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?
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.