Соглашения об именах JavaScript

Я знаю, что существует много противоречий (возможно, не противоречий, но, по крайней мере, аргументов) о том, какое соглашение об именах является лучшим для JavaScript.

Как вы называете свои переменные, функции, объекты и тому подобное?

Я оставлю свои собственные мысли по этому поводу, так как я не занимался JS долго (только пару лет), и я только что получил запрос на создание документа с соглашениями об именах, которые будут использоваться в наших проектах на работе, Так что я искал (гугл) вокруг, и есть так много разных мнений.

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

6 ответов

Решение

Я следую правилам кодекса Дугласа Крокфорда для javascript. Я также использую его инструмент JSLint для проверки соблюдения этих соглашений.

Как говорит Джефф, то, что говорит Крокфорд, хорошо.

Единственное исключение, за которым я следую (и которое широко используется), - это использование $varname для обозначения объекта jQuery (или любой другой библиотеки). Например

var footer = document.getElementById('footer');

var $footer = $('#footer');

Вы можете следовать этому руководству по стилю Google JavaScript

В общем, используйте functionNamesLikeThis, variableNamesLikeThis, ClassNamesLikeThis, EnumNamesLikeThis, methodNamesLikeThis и SYMBOLIC_CONSTANTS_LIKE_THIS.

РЕДАКТИРОВАТЬ: Посмотреть хорошую коллекцию руководств и украшений в стиле JavaScript.

Одно соглашение, которое я хотел бы опробовать, - это именование статических модулей с префиксом "the". Проверь это. Когда я использую чужой модуль, не легко понять, как я должен его использовать. например:

define(['Lightbox'],function(Lightbox) {
  var myLightbox = new Lightbox() // not sure whether this is a constructor (non-static) or not
  myLightbox.show('hello')
})

Я подумываю о том, чтобы попробовать соглашение, в котором статические модули используют "the", чтобы указать их предварительное существование. Кто-нибудь видел лучший способ, чем этот? Будет выглядеть так:

define(['theLightbox'],function(theLightbox) {
  theLightbox.show('hello') // since I recognize the 'the' convention, I know it's static
})

Я думаю, что помимо некоторых синтаксических ограничений; рассуждения по соглашениям об именах очень независимы от языка. Я имею в виду, что аргументы в пользу c_style_functions и JavaLikeCamelCase могут с равным успехом использоваться противоположным образом, просто пользователи языка стремятся следовать за авторами языка.

Сказав это, я думаю, что большинство библиотек обычно следуют упрощению Java CamelCase. Я нахожу советы Дугласа Крокфорда достаточно вкусными для меня.

Это отдельный вопрос, который может зависеть от того, как вы работаете. Некоторые люди любят помещать тип переменной в начале переменной, например "str_message". И некоторые люди любят использовать подчеркивание между своими словами ("my_message"), в то время как другие любят разделять их заглавными буквами ("myMessage").

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

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

Другие вопросы по тегам