Соглашения об именах 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".
Короче говоря: английский, строчные буквы, хорошо организованные имена переменных и функций предпочтительнее для меня. Имена должны описывать их существование, а не быть короткими.