2011-01-06 12 views
2

Ich versuche herauszufinden, wie Vererbung in Coffeescript funktioniert. Hier ist ein vereinfachtes Beispiel für meinen Code:CoffeeScript Klasse Vererbung

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 muß ich auf der Linie [1] die richtige Kind-Klasse verwenden markierte hier setzen? Dies funktioniert, aber erstellt nur Objekte mit einem Prototyp 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 das läßt obj als undefiniert in meiner Callback-Funktion (Typeerror:. 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

Antwort

2

Nevermind, dachte ich es aus:

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

Turns ou t Sie können nur new eine Klasse in einer Variablen gespeichert. Ich dachte, ich hätte das schon mal versucht, bekam aber einen Syntaxfehler.