Я обнаружил, что кодирую большой проект на Javascript. Я помню, что последний был настоящим приключением, потому что взломанный JS может быстро стать нечитаемым, и я хочу, чтобы этот код был чистым.
Ну, я использую объекты для создания библиотеки, но есть несколько способов определить вещи в JS, что подразумевает важные последствия в области видимости, управлении памятью, пространстве имен и т. Д. EG:
- использовать
var
или нет; - определение вещей в файле или в
(function(){...})()
стиле jquery; - использовать
this
или нет; - используя
function myname()
илиmyname = function()
; - определение методов в теле объекта или использование «прототипа»;
- и т.п.
Итак, каковы действительно лучшие практики при кодировании в ОО в JS?
Академические объяснения действительно ожидаются здесь. Ссылки на книги горячо приветствуются, если они касаются качества и надежности.
РЕДАКТИРОВАТЬ :
Получил некоторые чтения, но я все еще очень заинтересован в ответах на вопросы выше и любые лучшие практики.
javascript
oop
е-удовлетворяться
источник
источник
Ответы:
Используя `var` или нет
Вы должны ввести любую переменную с
var
оператором, иначе она попадет в глобальную область видимости.Стоит отметить, что в строгом mode (
"use strict";
) присваиваются необъявленные переменныеReferenceError
.В настоящее время JavaScript не имеет блочной области видимости. Школа Крокфорда учит вас помещать операторы var в начало тела функции , а в Руководстве по стилю Dojo говорится, что все переменные должны быть объявлены в наименьшей возможной области видимости . (
let
Утверждение и определение, введенные в JavaScript 1.7, не являются частью стандарта ECMAScript.)Хорошей практикой является привязка свойств регулярно используемых объектов к локальным переменным, поскольку это быстрее, чем поиск всей цепочки областей видимости. (См. Оптимизация JavaScript для максимальной производительности и низкого потребления памяти .)
Определение вещей в файле или в `(function () {...}) ()`
Если вам не нужно выходить за пределы вашего кода, вы можете заключить весь код в выражение функции - это называется шаблоном модуля. Он имеет преимущества в производительности, а также позволяет минимизировать и скрыть ваш код на высоком уровне. Вы также можете убедиться, что он не будет загрязнять глобальное пространство имен. Функции переноса в JavaScript также позволяют добавлять аспектно-ориентированное поведение. У Бена Черри есть глубокая статья по шаблону модуля .
Используя `это` или нет
Если вы используете псевдоклассическое наследование в JavaScript, вы вряд ли сможете избежать его использования
this
. Это вопрос вкуса, какой тип наследования вы используете. В других случаях просмотрите статью Питера Мишо о виджетах JavaScript без «этого» .Использование `function myname ()` или `myname = function ();`
function myname()
является объявлением функции иmyname = function();
является выражением функции, назначенным переменнойmyname
. Последняя форма указывает, что функции являются объектами первого класса, и вы можете делать с ними все, что угодно, как с переменной. Единственное различие между ними состоит в том, что все объявления функций поднимаются в верхнюю часть области, что может иметь значение в некоторых случаях. В противном случае они равны.function foo()
это сокращенная форма. Более подробную информацию о подъеме можно найти в статье JavaScript Scoping and Hoisting .Определение методов в теле объекта или использование «прототипа»
Тебе решать. JavaScript имеет четыре шаблона создания объектов: псевдоклассический, прототипный, функциональный и частичный ( Crockford, 2008 ). У каждого есть свои плюсы и минусы, посмотрите Крокфорда в его видео-выступлениях или получите книгу «Хорошие детали», как уже предлагал Анон .
Каркасы
Я предлагаю вам выбрать некоторые фреймворки JavaScript, изучить их соглашения и стиль и найти те практики и шаблоны, которые лучше всего вам подходят. Например, Dojo Toolkit предоставляет надежную среду для написания объектно-ориентированного кода JavaScript, который даже поддерживает множественное наследование.
Узоры
Наконец, есть блог, посвященный изучению общих шаблонов JavaScript и анти-шаблонов . Также проверьте вопрос Существуют ли какие-либо стандарты кодирования для JavaScript? в переполнении стека.
источник
let
Заявление и определение, введенные в JavaScript 1.7, не являются частью стандарта ECMAScript». Теперь это часть ES6.Я собираюсь записать некоторые материалы, которые я прочитал или положил в заявку, так как я задал этот вопрос. Таким образом, люди, читающие его, не будут разочарованы, так как большинство ответов замаскированы RTMF (даже если я должен признать, предлагаемые книги хороши).
Использование вар
Предполагается, что любая переменная уже объявлена в более высокой области видимости в JS. Поэтому, когда вам понадобится новая переменная, объявите ее, чтобы избежать неприятных сюрпризов, таких как манипулирование глобальной переменной, не замечая ее. Поэтому всегда используйте ключевое слово var.
В объекте make переменная private является переменной var. Если вы хотите просто объявить публичную переменную, используйте
this.my_var = my_value
для этого.Объявление методов
В JS это многочисленные способы объявления методов. Для программиста ОО наиболее естественным и эффективным способом является использование следующего синтаксиса:
Внутри тела объекта
Есть недостаток: внутренние функции не смогут получить доступ к «этому» из-за забавного объема JS. Дуглас Крокфорд рекомендует обойти это ограничение, используя обычную локальную переменную с именем «that». Так становится
Не полагайтесь на автоматический конец строки
JS пытается автоматически добавить
;
в конце строки, если вы забудете об этом. Не полагайтесь на это поведение, так как вы получите ошибки, которые бесполезны для отладки.источник
Сначала следует прочитать о программировании на основе прототипов, чтобы вы знали, с каким зверем вы имеете дело, а затем взгляните на руководство по стилю JavaScript на странице MDC и страницу JavaScript на MDC . Я также считаю, что лучше всего повысить качество кода с помощью инструмента, т.е. JavaScript Lint или другие варианты.
Наилучшая практика со звуками ОО больше , как вы хотите , чтобы найти образцы , чем концентрат на качество кода, поэтому посмотреть на Google поиск: JavaScript узоры и узоры JQuery .
источник
Возможно, вы захотите проверить секреты ниндзя JavaScript от Джона Резига (jQuery). «Эта книга предназначена для того, чтобы взять промежуточного разработчика JavaScript и дать ему знания, необходимые ему для создания кросс-браузерной библиотеки JavaScript с нуля».
Черновик доступен через издателя: http://www.manning.com/resig/
Дуглас Крокфорд также имеет несколько хороших статей о JavaScript на своей домашней странице: http://www.crockford.com/
источник
Я часто чувствую себя единственным парнем, который использует MooTools для моего JavaScript.
Это означает M у O ▪ Таблица O riented Инструменты, MooTools.
Мне очень нравится их взятие на ООП в JavaScript. Вы можете использовать их реализацию класса вместе с jquery, так что вам не нужно отказываться от jquery (хотя mootools делает все это так же хорошо).
В любом случае, прочитайте первую ссылку и посмотрите, что вы думаете, вторая ссылка - на документы mootools.
MooTools & Inheritance
Классы MooTools
источник
Вот книга, которая охватывает большинство основ:
Объектно-ориентированный Javascript для высококачественных приложений и библиотек
источник