Вопрос

Я пытаюсь выяснить, как наследование работает в 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» undefined ».

Что означает магическое заклинание в 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