Похожие, но немного разные функции JavaScript


У меня есть две очень похожие функции, которые существуют в основном за синтаксический сахар.

deactivate = (el, seek) -> el.find(seek).removeClass("active")
activate = (el, seek) -> el.find(seek).addClass("active")

Это позволяет мне писать, например:

activate $("#something"), ".child"

Используя приведенные выше исключительно в качестве примера, игнорируя любые логические ошибки с помощью JavaScript... как это может быть переработан, чтобы быть более сухой?



223
1
задан 19 декабря 2011 в 01:12 Источник Поделиться
Комментарии
2 ответа

Вы можете использовать квадратные скобки в JS для этой задачи

alter = (el, seek, method) -> el.find(seek)[method + "Class"]("active")
#use like this:
alter $("#something"), ".child", "add"

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

2
ответ дан 19 декабря 2011 в 01:12 Источник Поделиться

Я думаю, что ваш код нормально. Я хотел только предложить более сложное решение, только если эта закономерность случается чаще.

Например, если вы хотите рефакторинг, чтобы для других класов вы можете сделать что-то вроде этого:

adder   = clsName -> (el, seek) -> el.find(seek).removeClass(clsName)
remover = clsName -> (el, seek) -> el.find(seek).addClass(clsName)

activate = adder 'active'
deactivate = remover 'active'

0
ответ дан 19 декабря 2011 в 03:12 Источник Поделиться