質問

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

...しかし、これは去ります obj 私のコールバック関数で定義されていないように(TypeError:未定義のプロパティ「foo」を読むことができません」。

Coffeescriptの魔法の呪文は、クラスが変動するクラスの新しいオブジェクトを作成できるのは何ですか?

役に立ちましたか?

解決

気にしないで、私はそれを理解しました:

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

あなたはただできることがわかります new 変数に保存されているクラス。以前にこれを試したことがありましたが、構文エラーが発生していました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top