В других языках объектно-ориентированного программирования, следующая общая форма абстракцииCoffeeScript Наследование: Статические переменные/методы
class AbstractClass
myVar: null
@doSomething: ->
console.log myVar
class Child extends AbstractClass
myVar: 'I am a child'
Вызов Child.doSomething() должен печатать «Я ребенок». Я также должен передать Child.doSomething в качестве обратного вызова и напечатать его. Я пробовал все комбинации с или без @, используя точки с запятой и равные для определения myVar, я не могу понять это. Каков правильный способ сделать это в CoffeeScript?
редактировать
Я думаю, что упрощать мой пример, потому что я не могу заставить его работать (дальнейшее редактирование: сейчас работает с этим решением). Вот реальный код (с предложенным решением в месте):
class AbstractController
@Model: null
@index: (req, res) ->
console.log @
console.log @Model
@Model.all?(req.params)
class OrganizationController extends AbstractController
@Model: require "../../classes/community/Organization"
В моем файле маршрутизации
(express, controller) ->
router = express.Router({mergeParams: true})
throw new Error("Model not defined") unless controller.Model?
console.log controller
router
.get "/:#{single}", _.bind(controller.show, controller)
.get "/", _.bind(controller.index, controller)
.post "/", _.bind(controller.post, controller)
Передача OrganizationController этой функции правильно регистрирует объект OrganizationController, так что я знаю, что там получают:
{ [Function: OrganizationController]
Model: { [Function: Organization] ...},
index: [Function],
__super__: {} }
Но когда я ударил по этому пути, два console.log звонки распечатать
{ [Function: AbstractController]
Model: null,
index: [Function] }
null
И я получаю сообщение об ошибке: «Не удается прочитать свойство„все“в нуль»