Я работаю над системой листов персонажей на основе javascript для ролевых игр.В конкретном типе RPG, который я пытаюсь реализовать, существует что-то вроде дерева наследования, так что существуют базовые правила системы RPG, есть более конкретные правила для данного параметра в этой системе RPG, и тогда может бытьразличия между конкретными версиями этого параметра.
Для данного взаимодействия с пользователем код должен выполнить некоторые действия для всей RPG-системы и некоторый другой код для конкретного используемого параметра и версии.
В настоящее время я занимаюсь этим, выполняя что-то в форме:
CharacterSheet.prototype.handleSomeUserInteraction() {
this.handleSomeUserInteractionForSystem();
this.handleSomeUserInteractionForSetting();
this.handleSomeUserInteractionForVersion();
}
// Empty implementations here to avoid errors, this will be overwritten with a
// function that does the actual handling in a separate file
CharacterSheet.prototype.handleSomeUserInteractionForSystem() {}
CharacterSheet.prototype.handleSomeUserInteractionForSetting() {}
CharacterSheet.prototype.handleSomeUserInteractionForVersion() {}
Вышеуказанное, конечно, не элегантно и не эффективно - некоторые взаимодействия не требуют обработки на всех трех уровнях, но я все ещедолжны вызвать пустой обратный вызов.(Следует отметить, что, конечно, я заранее не знаю, какой из этих обратных вызовов необходим - это зависит от конкретной системы / настройки / версии.)
В идеале я хотел бы добиться следующего:
- Он должен быть легким - в редких случаях эти обратные вызовы должны вызываться, может быть, сто раз в секунду.
- Должны быть вызваны только обязательные / непустые обратные вызовы.
- Интерфейс для регистрации обратного вызова должен быть интуитивно понятным и понятным, чтобы другие разработчики, не знакомые с остальным кодом, могли легко его использовать для разработки своего собственного кода системы RPG / настройки / версии.
- Т.е. должно быть очевидно, какие части кода могут быть расширены (например, где может быть зарегистрирован обратный вызов) и как.
- В связи с вышеизложенным, должно быть как можно меньше манипулирования, например,«Это» аргументы, насколько это возможно.
Как мне лучше всего достичь вышеуказанных целей?
ПРИМЕЧАНИЕ: Поскольку наследование немногоДля меня это непонятно в JavaScript Я не пошел по этому пути, я также читал, что наследование JS может снизить производительность (хотя я подозреваю, что при моих требуемых четырех уровнях наследования это не будет проблемой).
ПРИМЕЧАНИЕ: Я ищу чистое ванильное решение JS, я не большой поклонник всех этих фреймворков, которые напрасно раздувают кодовую базу.