Вопрос по vote.js

Извиняюсь за придирку, но не могу понять зачем нужен фрагмент кода в vote.js. Рассматривая движок LS заметил одну особенность объекта vote, отвечающего за голосование. Основной метод голосования ls.vote.vote(idTarget, objVote, value, type) содержит маркер voidBefore, что позволяет делать инъекции в код (подробнее здесь) до начала обработки голосования. Маркер voteAfter не предусмотрен (. Но ниже по коду в окончании метода onVote, видим такие строки:
var method='onVote'+ls.tools.ucfirst(type);
if ($.type(this[method])=='function') {
     this[method].apply(this,[idTarget, objVote, value, type, result]);
}

То есть, например, что, для случая голосования за топик, будет вызван метод

ls.vote.onVoteTopic(idTarget, objVote, value, type, result),

если он существует. Сам метод не реализован в движке, поэтому мы можем реализовать его сами учитывая, что другие дополнения могут использовать этот метод.

Будет ли такой подход к перехвату голосования корректным? Я думаю Да, если признать приведенный выше вызов как официальный механизм наряду с хуками и маркерами — что само по себе неправильно. И нет, поскольку это артефакт в поведении объекта, на мой взгляд, поскольку фактически реализовано в движке только onVoteUser.
Если имеется ввиду предоставление потенциальной возможности пользователю обрабатывать успешное окончание голосования, то почему таким хитрым способом. Если предполагается будущее наращивание функционала, то вопрос снимается, но заглушки бы не помешали.
И собственно вопрос: Зачем нужен вызов this[method].apply(this,[idTarget, objVote, value, type, result]);. Могу ли я использовать эту лазейку в своих расширениях или нет

2 комментария

avatar
Этот механизм был введен до хуков, чтобы избавиться от костыля с голосованием за пользователя(кастомная обработка результата) и сохранить универсальность. Им можно пользоваться.
  • ort
  • +1
avatar
Спасибо.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.