Пробовал в списке зависимостей указывать link_animated
- не вышло. Подобным образом — то же самое.
modules.define(
'scroll-top',
[ 'i-bem__dom', 'jquery' ],
function(provide, BEMDOM, $) {
provide(BEMDOM.decl({ block: this.name, baseBlock: { block: 'link', modName: 'animated', modVal: true } }, {
// ...
}));
}
);
Возможно осуществить задуманное?
Нет, этого «не нужно хотеть», т.к. модификатор — это свойство рантайма: он может появиться или исчезать на блоке в процессе взаимодействия с пользователем.
Как же, к примеру,
button
с модификаторомtype
значенияsubmit
— разве это свойство рантайма? У меня примерно та же ситуация: модификатор не требуется убирать в рантайме.Это частный случай и имеет отношение скорее к шаблонам, чем к JS.
С точки зрения JS любой модификатор потенциально можно удалить в любой момент.
Тогда если модификатор "не отзывчивый", а функционально от данной разновидности блока может наследоваться что-то иное, то следует оформлять новый блок: к примеру,
animated-link
— я правильно понял? (а далее требуется лишь наследоваться от простого блока)Как вариант — да. Еще можно подумать в сторону композиции. Если что-то ведет себя как анимированная ссылка и умеет подскроллиться вверх, то, возможно, это просто одновременно и ссылка и блок про скролл:
Вообще говоря, глубокие цепочки наследований в самом ООП сложно поддерживать — даже со внуками уже сложно, кроме того, еще и чистый ООП в javascript ущербный, нет чистых приватных свойств (вроде как и не нужны), как и сложно реализовать protected (их все равно видно, но можно их переименовать).
Но еще можно посмотреть в сторону миксов, @tadatuta они же есть? Я только не знаю как и православно оформлять в виде блоков.
@zxqfox речь об этом?
Да, об этом. В такой микс можно вынести общую оторванную функциональность и после примешать обоим блокам.