2011-01-06 2 views
2

Я пытаюсь выяснить, как наследование работает в coffeescript. Вот упрощенный пример моего кода:Наследование класса CodeScript

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 ? чтобы быть в состоянии создать новый объект класса, где класс является переменной

ответ

2

Nevermind, я понял это:

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

Повороты НУ t вы можете просто new класс, хранящийся в переменной. Я думал, что раньше пробовал, но получал синтаксическую ошибку.

Смежные вопросы