Вызов метода суперкласса через расширенный класс приводит к ошибке типа

#coffeescript

#coffeescript

Вопрос:

Я не уверен, все ли сказано в названии.

Что я пытаюсь сделать, так это создать суперкласс (или более или менее абстрактный класс), который затем используется другим классом, который расширяется из суперкласса.

Теперь, что я сделал, это создал простой скрипт:

 class Animal
  constructor: (@name, @sound) ->
  setSound: (@sound) ->
  sound: ->
    alert "#{@sound}!!!"

  name: ->
    alert "#{@name}"

class Dog extends Animal
  constructor: (@name) ->
    @setSound "Woof"

doggy = new Dog "Max"
doggy.sound()
  

Как вы можете видеть — это всего лишь дерьмовый пример, но что происходит, когда я сейчас вызываю doggy.sound() , я получаю TypeError в ответ.

Вы можете увидеть этот скрипт в действии здесь:http://jsfiddle.net/zrVZb/1 /
Я делаю что-то неправильно или это даже ошибка в coffeescript?

редактировать: я только что увидел, что это contructor и не construct . Но теперь вместо этого я получаю ошибку типа.

Спасибо

Ответ №1:

Ваш метод вызван sound . Но затем вы передаете атрибут с тем же именем, который перезаписывает этот метод. Попробуйте переименовать свой метод sound в makeSound :

http://jsfiddle.net/V7Dx8/1/