2

私は、コーヒースクリプトで継承がどのように機能するかを理解しようとしています。これが私のコードの簡単な例です:

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:undefinedのプロパティ'foo'を読み取ることができません"。

クラスが可変であるクラスの新しいオブジェクトを作成できるようにするためのCoffeeScriptの魔法の呪文は何ですか?

4

1 に答える 1

2

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

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

new変数に格納されたクラスだけが可能であることがわかりました。以前にこれを試したことがあると思いましたが、構文エラーが発生していました。

于 2011-01-06T19:38:16.857 に答える