2013-02-12 3 views
3

В CoffeeScript, кажется, что конструктор суперклассов не вызывается при создании экземпляра подкласса.CoffeeScript, прототипное наследование и конструкторы

Есть ли способ обойти это?

Вот пример:

class A 
    element = null 

    constructor: -> 
     element = document.createElement "div" 

    hide: => 
     element.style.display = "none" 

class B extends A 
    constructor: -> 
     @hide() #error! 

Я ожидал бы конструктор A называться первым, затем B «s конструктора. Если B затем вызывает метод hide, он должен скрыть элемент, созданный в конструкторе A, вместо того чтобы сказать, что element имеет значение NULL.

Спасибо!

+0

Я согласен, что это, кажется, ошибка в CoffeeScript. Вы создали для него проблему? –

ответ

5

Я думаю, вам нужно позвонить в супер Подкласс

class A 
    element = null 

    constructor: -> 
     element = document.createElement "div" 

    hide: => 
     element.style.display = "none" 

class B extends A 
    constructor: -> 
     super 
     @hide() #error! 
+0

Документация: http://coffeescript.org/#classes –

+0

Да, я пробовал это, но похоже, что он копирует функции на 'B', победив цель прототипа. Я ошибаюсь? – tau

+0

Должен признаться, я никогда не смотрел на сгенерированную функцию __extends, но мне кажется, что она создает правильную цепочку прототипов. – robkuz

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