CoffeeScript ereditarietà di classe
-
30-09-2019 - |
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?
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.