Наследование дочернего класса, помещенного в другой файл (CoffeeScript) - PullRequest
0 голосов
/ 25 апреля 2019

Как правильно организовать дочерние классы в разных файлах с CoffeeScript?Вот простой пример проблем с кодом.Snake работает нормально, но затем, пытаясь использовать класс Dog (потому что он находится в другом классе), выдает следующую ошибку:

TypeError: Dog не является конструктором

Основной файл: .test / Animals.coffee

#expect = require "expect.js"
Animal = require "../learning/Animals"
Snake = Animal.Snake
Dog = require "../learning/Dog"
#Dog = Animal.Dog #unresolved variable

describe 'animals', ->
  it 'test inheritance', ->
    sam = new Snake "Sammy the Python"
    peanut = new Dog "Peanut the Dog"

    sam.move()
    peanut.move()

Родительский класс: .learning / Animals.coffee

class Animal
  constructor: (@name) ->

  move: (meters) ->
    console.log(@name + " moved #{meters}m.")

class Snake extends Animal
  move: ->
    console.log( "Slithering...")
    super 5

module.exports = { Animal, Snake }

Детский класс: .learning / Dog.coffee

Animal = require './Animals'

class Dog extends Animal
  move: ->
    console.log( "Runs...")
    super 15

module.exports = { Dog }

1 Ответ

1 голос
/ 26 апреля 2019

Вы экспортируете объекты, содержащие классы:

module.exports = { Dog }

Это эквивалентно

module.exports = {
  Dog: Dog
}

Вы можете деструктурировать импортированный объект:

{ Dog } = require('./Dog.coffee')

Этоаналогично:

a = require('./Dog.coffee')
Dog = a.Dog

Вы должны быть последовательными и всегда экспортировать объекты и всегда разбивать импортируемый объект на те части, которые вам нужны.

В качестве альтернативы, я бы предложил дать каждому классу свой собственныйфайл, чтобы избежать путаницы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...