2011-01-06 21 views
2

私はcoffeescriptで継承がどのように機能するかを調べようとしています。ここに私のコードの簡単な例です:私はライン上に配置する必要がありますどのようなCoffeeScriptクラスの継承

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 

は、ここでは、正しい子クラスを使用するように[1]をマーク?これは動作しますが、プロトタイプがChildAのオブジェクトのみが作成されます。私のような何か試してみた:

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

を...しかし、これは私のコールバック関数(TypeError例外にすると不定objを残し:未定義のプロパティ「foo」を読み込めません」

をいただきましたCoffeeScriptの中に魔法の呪文?クラスが可変であるクラスの新しいオブジェクトを作成することができ

答えて

2

ネヴァーマインドであることを、私はそれを考え出した:

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

は、OUをオンにします変数に格納されたクラスはnewだけです。私は以前これを試したと思っていましたが、構文エラーが出ていました。