Объектно-ориентированные рекомендации Javascript?

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

Ну, я использую объекты для создания lib, но есть несколько способов определить вещи в JS, подразумевая важные последствия в области, управлении памятью, пространстве имен и т.д. E.G:

  • с помощью var или нет;
  • определение элементов в файле или в стиле (function(){...})(), jQuery;
  • с помощью this, или нет;
  • с помощью function myname() или myname = function();
  • определение методов в теле объекта или использование "prototype";
  • и др.

Итак, каковы действительно лучшие методы при кодировании в OO в JS?

Академические объяснения действительно ожидаются здесь. Ссылка на книги тепло приветствуется, если они касаются качества и надежности.

ИЗМЕНИТЬ:

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

Ответ 1

Использование `var` или не

Вы должны ввести любую переменную с инструкцией var, иначе она попадет в глобальную область.

Стоит отметить, что в строгом режиме ("use strict";) необъявленные назначения переменных бросают ReferenceError.

В настоящее время JavaScript не имеет области блока. Школа Crockford учит вас поместить инструкции var в начало тела функции, а Dojo Руководство по стилю читает, что все переменные должны быть объявлены в наименьшей возможной области. (let инструкция и определение, введенные в JavaScript 1.7, не являются частью стандарта ECMAScript.)

Хорошей практикой является привязывать свойства регулярных объектов к локальным переменным, поскольку они быстрее, чем поиск всей цепочки областей видимости. (См. Оптимизация JavaScript для экстремальной производительности и низкого потребления памяти.)

Определение вещей в файле или в `(function() {...})()`

Если вам не нужно добираться до объектов вне вашего кода, вы можете обернуть весь свой код в выражении функции - он называется шаблоном модуля. Он имеет преимущества производительности, а также позволяет минимизировать и затенять код на высоком уровне. Вы также можете убедиться, что это не будет загрязнять глобальное пространство имен. Функции Wrapping в JavaScript также позволяют добавлять аспектно-ориентированное поведение. У Ben Cherry есть подробная статья о шаблоне модуля.

Использование `this` или не

Если вы используете псевдоклассическое наследование в JavaScript, вы вряд ли сможете избежать использования this. Это вопрос вкуса, который вы используете для наследования. В других случаях проверьте статью Peter Michaux на JavaScript Widgets Without "this" .

Использование `function myname()` или `myname = function();`

function myname() - это объявление функции, а myname = function(); - выражение функции, назначаемое переменной myname. Последняя форма указывает, что функции являются первоклассными объектами, и вы можете делать с ними что угодно, как с переменной. Единственное различие между ними заключается в том, что все объявления функций поднимаются в верхнюю часть области, что может иметь значение в некоторых случаях. В противном случае они равны. function foo() является сокращенной формой. Более подробную информацию о подъеме можно найти в статье JavaScript Scoping and Hoisting.

Определение методов в теле объекта или использование "prototype"

Это вам. JavaScript имеет четыре шаблона создания объекта: псевдоклассический, прототипный, функциональный и части (Crockford, 2008). У каждого есть свои плюсы и минусы, см. Крокфорд в своих видео-переговорах или получить его книгу The Good Parts как Анон уже предложил.

Каркасы

Я предлагаю вам поднять некоторые рамки JavaScript, изучить их соглашения и стиль, а также найти те методы и шаблоны, которые наилучшим образом подходят вам. Например, Dojo Toolkit предоставляет надежную структуру для написания объектно-ориентированного кода JavaScript, который даже поддерживает множественное наследование.

Шаблоны

Наконец, есть блог, посвященный изучить общие шаблоны JavaScript и анти-шаблоны. Также проверьте вопрос Есть ли какие-либо стандарты кодирования для JavaScript? в переполнении стека.

Ответ 2

Я собираюсь записать некоторые материалы, которые я читал или добавлял в приложение, так как я задавал этот вопрос. Таким образом, люди, читающие его, не расстраиваются, так как большинство ответов - это маскировка RTMF (даже если я должен признать, предлагаемые книги являются хорошими). ​​

Использование Var

Любая переменная должна быть объявлена ​​в более высокой области действия в JS. Поэтому, когда вам нужна новая переменная, объявите ее, чтобы избежать неприятных сюрпризов, например, манипулировать глобальным var, не замечая этого. Поэтому всегда используйте ключевое слово var.

В объекте make var var private. Если вы хотите просто объявить общедоступную переменную, используйте this.my_var = my_value для этого.

Объявление методов

В JS они являются многочисленным способом объявления методов. Для программиста OO наиболее естественным и эффективным способом является использование следующего синтаксиса:

Внутри тела объекта

this.methodName = function(param) {

/* bla */

};

Существует недостаток: внутренние функции не смогут получить доступ к "this" из-за смешной области JS. Дуглас Крокфорд рекомендует обойти это ограничение, используя обычную локальную переменную с именем "that". Таким образом, он становится

function MyObject() {

    var that = this;

    this.myMethod = function() {

        jQuery.doSomethingCrazy(that.callbackMethod);

    };

};

Не полагайтесь на автоматический конец строки

JS пытается автоматически добавить ; в конец строки, если вы его забудете. Не полагайтесь на это поведение, так как вы получите ошибки, которые нужно отладить.

Ответ 3

Сначала следует прочитать про прототип , чтобы вы знали, с каким зверем вы имеете дело, а затем взгляните на Руководство по стилю JavaScript в MDC и страница JavaScript в MDC. Я также считаю, что лучше всего использовать качество кода с помощью инструмента, т.е. JavaScript Lint или другие варианты.

Лучшие практики с OO звучат скорее как вы хотите найти шаблоны, чем сосредоточиться на качестве кода, поэтому посмотрите Поиск Google: шаблоны javascript и шаблоны jQuery.

Ответ 4

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

Проект доступен через издателя: http://www.manning.com/resig/

У Дугласа Крокфорда также есть интересные статьи на его домашней странице: http://www.crockford.com/

Ответ 5

Я часто чувствую себя единственным парнем, который использует MooTools для моего javascript.

Он обозначает M y O bject O, ориентированные инструменты, mootools.

Мне очень нравится, что они берут ООП в javascript. Вы можете использовать их реализацию класса вместе с jquery, так что вам не нужно вырезать jquery (хотя mootools делает все это так же хорошо).

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

MooTools and Inheritance

Классы MooTools