Frage

Ich versuche, herauszufinden, wie Vererbung in Coffeescript funktioniert. Hier ist ein vereinfachtes Beispiel meines 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

Was muss ich auf der Linie markiert [1] setzen die richtige Kind Klasse hier zu benutzen? Dies funktioniert, aber nur erstellten Objekte mit einem Prototyp von ChildA. Ich habe versucht, so etwas wie:

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

... aber diese Blätter obj wie in meiner Callback-Funktion (Typeerror undefined:. Kann nicht Eigentum 'foo' undefinierten lesen“

Was ist der Zauberspruch in Coffeescript in der Lage sein, ein neues Objekt einer Klasse zu erstellen, in dem die Klassenvariable ist?

War es hilfreich?

Lösung

Nevermind, ich es herausgefunden:

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

Stellt sich heraus, man kann nur eine Klasse in einer Variablen gespeichert new. Ich dachte, ich vorher versucht hatte, war aber einen Syntaxfehler zu bekommen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top