Наследование класса CoffeeScript
-
30-09-2019 - |
Вопрос
Я пытаюсь выяснить, как наследование работает в 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
класс, хранящийся в переменной. Я думал, что попробовал это раньше, но получил синтаксическую ошибку.
Не связан с StackOverflow