Определение свойств и соглашений об именах в JavaScript

Я был хорошим программистом JavaScript и придерживался соглашения о кодировании, зачисленные Дуглас Крокфорд. Однако JavaScript развился с тех пор, и я считаю, что соглашения об именах устарели.

Например, Крокфорд сказал:

Не используйте _ (underbar) в качестве первого символа имени. Иногда это используется для указания конфиденциальности, но на самом деле это не обеспечивает конфиденциальность. Если конфиденциальность важна, используйте формы, которые предоставляют частные участники. Избегайте соглашений, которые демонстрируют недостаточную компетентность.

Однако JavaScript теперь позволяет создавать неперечислимые свойства. Следовательно, имеет смысл (по крайней мере, для меня - вы можете не согласиться) префикс неперечислимых свойств с нижним баром, чтобы указать, что свойство не перечислимо.

Зачем вам это делать?

  • Потому что важна визуальная обратная связь (прокрутите вниз до раздела читаемости в связанной статье).
  • Обратная совместимость. Вы можете отфильтровать свойства, начинающиеся с нижнего бара в цикле for in.

Давайте возьмем еще один пример того, что сказал Крокфорд:

Глобальные переменные должны быть во всех шапках. (JavaScript не имеет макросов или констант, поэтому нет смысла использовать все кепки для обозначения функций, которые не имеют JavaScript.)

Как я вижу, есть две проблемы со следующим соглашением:

  • Большинство программистов JavaScript не записывают глобальные переменные во всех кепках. Это просто неестественно.
  • Теперь JavaScript позволяет создавать свойства, недоступные для записи. Следовательно, имеет смысл использовать все шапки для таких свойств по тем же причинам, что и выше, для неперечислимых свойств.

Все, что хорошо и хорошо, но какой вопрос вы задаете? Посмотрите на функцию

Теперь свойства, начинающиеся с нижнего бара, не перечислимы, свойства, заканчивающиеся на нижнем баре, не настраиваются, а свойства дескриптора данных, которые не имеют строчных алфавитов, не записываются.

Итак, мой вопрос заключается в следующем: существует ли способ сделать объекты неперечислимыми, неконфигурируемыми или непригодными для записи, но при этом придерживаться соглашений об именах Crockford? Я знаю, что мои собственные соглашения об именах имеют больше преимуществ. Однако я не хочу слишком быстро отказаться от конвенций Крокфорда.

Ответ 1

Я бы посоветовал не следовать инструкциям Крок, говорящим слово.

У него есть хороший совет, но стоит взять его с солью.

Например, аспект подчеркивания обычно используется в различных JS-библиотеках, которые следуют более классическому стилю программирования ООП. Это правда, что он не делает функцию или значение правдиво частной, но она говорит любым пользователям, что она должна рассматриваться как таковая, - что она не является частью публичного интерфейса - другими словами, метод может исчезнуть в следующей версии библиотека.

Соглашение для именования константоподобных значений также равно ALL_CAPS_WITH_UNDERSCORE, хотя JS фактически не имеет констант.

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