JavaScript. Шаблоны

Характерные особенности написания приложений на javascript. Из этой книги вы получите ответы на многие вопросы.

 

 

 


Стефанов С."JavaScript. Шаблоны", Символ-Плюс, 2011 год, 272 стр., ил., (2,89 мб,.djvu)

Отрывок из книги:

Разрабатывая программные продукты на javascript иногда бывают проблемы, связанные со спецификой этого языка. Читая книгу вы сможете воспользоваться большим количеством различных шаблонов на javascript, таких как "единственный объект" (singleton), "фабрика" (factory), "декоратор" (decorator) и другие.

Пишите так, чтобы можно было читать.

Создание комментариев с описанием API - это не только ленивый способ создания справочной документации; он служит еще одной цели -повышению качества программного кода, заставляя вас еще раз просмотреть свой код. Любой писатель или редактор скажет вам, что этап редактирования имеет важное значение: это, возможно, самый важный этап в подготовке книги или статьи. Создание рукописи - это лишь первый шаг. Рукопись представляет некоторую информацию читателю, но зачастую не самым ясным и простым способом.То же относится и к программному коду.

Когда вы садитесь и решаете какую-то проблему, это решение является всего лишь первым, черновым вариантом. Реализованное решение генерирует желаемый результат, но насколько это решение оптимально? Насколько легко будет читать, понимать, сопровождать и обновлять программный код? Вернувшись к программному коду - желательно спустя некоторое время, - вы практически наверняка обнаружите участки, которые можно было бы улучшить - изменить код так, чтобы его было проще читать, повысить эффективность и так далее. Это, по сути, и есть этап редактирования, который может помочь вам в достижении вашей цели - создание высококачественного программного кода. Однако очень часто мы работаем в условиях жестко ограниченного времени («есть проблема и решить ее надо вчера»), и, как правило, у нас не остается времени на редактирование.

Именно поэтому создание документации с описанием API дает дополнительную возможность редактирования.Часто при создании блоков комментариев с описанием приходится вновь погружаться в проблему. Иногда при таком повторном погружении становится очевидным, например, что вот этот третий параметр метода бывает необходим гораздо чаще, чем второй, а второй параметр практически всегда получает значение по умолчанию true, поэтому есть смысл изменить интерфейс метода, поменяв параметры местами. Фраза «писать так, чтобы можно было читать» означает, что вы должны писать программный код или, по крайней мере, API, помня о том, что кто-то будет его читать.

Одна только мысль об этом заставит вас редактировать код и находить более удачные решения стоящих перед вами проблем. Говоря о первых, черновых вариантах решения, стоит заметить, что часто они пишутся, «чтобы потом выбросить их». На первый взгляд эта идея кажется абсурдной, но она обретает особый смысл, особенно если вы работаете над критически важным приложением (от которого могут зависеть человеческие жизни). Суть идеи состоит в том, что первое найденное решение должно быть отброшено и необходимо приступить

Оглавление
Предисловие 13

Глава 1. Введение 19
Шаблоны 19
JavaScript: концепции .21
JavaScript - объектно-ориентированный язык 21
В JavaScript отсутствуют классы 22
Прототипы 23
Среда выполнения 23
ECMAScript 5 24
JSLint 25
Консоль 26

Глава 2. Основы 28
Создание простого в сопровождении программного кода 28
Минимизация количества глобальных переменных 30
Проблемы, связанные с глобальными переменными 30
Побочные эффекты, возникающие в отсутствие объявления var 32
Доступ к глобальному объекту 33
Шаблон единственной инструкции var 33
Подъем: проблемы с разбросанными переменными 34
Циклы for 36
Циклы for-in 38
Расширение встроенных прототипов (в том числе нежелательное) 41
Шаблон switch 42
Избегайте неявного приведения типов 42
Не используйте eval() 43
Преобразование строки в число с помощью parselnt() 45
Соглашения по оформлению программного кода 46
Отступы 46
Фигурные скобки 47
Местоположение открывающей скобки 48
Пробелы .49
Соглашения по именованию 51
Заглавные символы в именах конструкторов 51
Выделение слов 51
Другие шаблоны именования 52
Комментарии 53
Документирование API 54
Пример использования YUIDoc 55
Пишите так, чтобы можно было читать 59
Оценка коллегами .60
Сжатие... при подготовке к эксплуатации 60
Запуск JSLint 61
В заключение 62

Глава 3. Литералы и конструкторы 64
Литералы объектов .64
Синтаксис литералов объектов .66
Создание объектов с помощью конструкторов 66
Недостатки конструктора Object 67
Собственные функции-конструкторы .68
Значения, возвращаемые конструкторами .69
Шаблоны принудительного использования new 70
Соглашения по именованию 71
Использование ссылки that 71
Конструкторы, вызывающие сами себя 72
Литералы массивов 73
Синтаксис литералов массивов 73
Странности конструктора Array 73
Проверка массивов 74
JSON 75
Обработка данных в формате JSON 76
Литералы регулярных выражений 77
Синтаксис литералов регулярных выражений 77
Объекты-обертки значений простых типов 79
Объекты Error .80
В заключение 81

Глава 4. Функции .83
Основы 83
Устранение неоднозначностей в терминологии .85
Объявления и выражения: имена и подъем .86
Свойство name функций 87
Подъем функций .88
Функции обратного вызова 89
Пример использования функции обратного вызова 90
Функции обратного вызова и их области видимости 92
Обработчики асинхронных событий .94
Предельное время ожидания 94
Функции обратного вызова в библиотеках 95
Возвращение функций 95
Самоопределяемые функции 96
Немедленно вызываемые функции 98
Параметры немедленно вызываемых функций 99
Значения, возвращаемые немедленно вызываемыми функциями 100
Преимущества и особенности использования 101
Немедленная инициализация объектов 102
Выделение ветвей, выполняющихся на этапе инициализации 104
Свойства функций - шаблон мемоизации 106
Объекты с параметрами 108
Каррирование 109
Применение функций 109
Частичное применение 110
Каррирование 112
Когда использовать каррирование 115
В заключение 115

Глава 5. Шаблоны создания объектов 117
Пространство имен 117
Универсальная функция для создания пространства имен 119
Объявление зависимостей 121
Частные свойства и методы 123
Частные члены. 123
Привилегированные методы 124
Нежелательный доступ к частным членам 124
Частные члены и литералы объектов 126
Частные члены и прототипы 126
Объявление частных функций общедоступными методами 127
Шаблон «модуль» 129
Шаблон открытия модуля 131
Модули, создающие конструкторы 132
Импортирование глобальных переменных в модули 133
Шаблон изолированного пространства имен 133
Глобальный конструктор 134
Добавление модулей 135
Реализация конструктора 136
Статические члены 138
Общедоступные статические члены 138
Частные статические члены 140
Объекты-константы 142
Шаблон цепочек 144
Достоинства и недостатки шаблона цепочек 145
Метод method() 145
В заключение 147

Глава 6. Шаблоны повторного использования программного кода 148
Классические и современные шаблоны наследования 149
Ожидаемый результат при использовании классического наследования 150
Классический шаблон №1: шаблон по умолчанию 150
Обход цепочки прототипов 151
Недостатки шаблона №1 153
Классический шаблон №2: заимствование конструктора 154
Цепочка прототипов 155
Множественное наследование
при заимствовании конструкторов 157
Достоинства и недостатки шаблона заимствования конструктора 157
Классический шаблон №3:
заимствование и установка прототипа 158
Классический шаблон №4:
совместное использование прототипа 159
Классический шаблон №5: временный конструктор 160
Сохранение суперкласса 162
Установка указателя на конструктор 162
Функция klass() 163
Наследование через прототип 166
Обсуждение 168
Дополнения в стандарте ECMAScript 5 169
Наследование копированием свойств 169
Смешивание 171
Заимствование методов 173
Пример: заимствование методов массива 173
Заимствование и связывание 174
Function, prototype.bind() 176
В заключение 176

Глава 7. Шаблоны проектирования 178
Единственный объект 178
Использование оператора new 179
Экземпляр в статическом свойстве 180
Экземпляр в замыкании 181
Фабрика 184
Встроенная фабрика объектов 186
Итератор 187
Декоратор 189
Пример использования 189
Реализация 190
Реализация с использованием списка 193
Стратегия 194
Пример проверки данных 195
Фасад 198
Прокси-объект 199
Пример .200
Прокси-объект как кэш 209
Посредник 209
Пример использования шаблона посредника 210
Наблюдатель .213
Пример 1: подписка на журнал 214
Пример 2: игра на нажатие клавиш 217
В заключение 221

Глава 8. Шаблоны для работы с деревом DOM и браузерами 223
Разделение на составные части 223
Работа с деревом DOM 225
Доступ к дереву DOM .225
Манипулирование деревом DOM 227
События .228
Обработка событий 229
Делегирование событий 231
Сценарии, работающие продолжительное время 233
setTimeout() 233
Фоновые вычисления (web workers) 234
Удаленные взаимодействия 235
XMLHttpRequest .235
Формат JSONP 237
Обмен данными с использованием фреймов и изображений 240
Развертывание сценариев JavaScript 241
Объединение сценариев .241
Сжатие и компрессия 242
Заголовок Expires 243
Использование CDN 243
Стратегии загрузки 244
Местоположение элемента 244
Фрагментирование средствами HTTP 246
Динамические элементы для неблокирующей загрузки сценариев 247
Отложенная загрузка 249
Загрузка по требованию 250
Предварительная загрузка сценариев JavaScript 252
В заключение 254
Алфавитный указатель 256
Скачать