Разработчики серверных, клиентских или настольных приложений на JavaScript
нередко сталкиваются с проблемами, связанными с объектами, функциями, наследованием и другими особенностями этого языка. Какие же приемы
разработки приложений на JavaScript являются наиболее удачными? Данная
книга дает ответ на этот вопрос, предлагая большое количество различных
шаблонов программирования на JavaScript, таких как ≪единственный объект≫
(singleton), ≪фабрика≫ (factory), ≪декоратор≫ (decorator) и другие. Можно сказать, что они являются не только методами решения наиболее типичных задач разработки ПО, но и заготовками решений для целых категорий таких задач.
Использование шаблонов при программировании на языке JavaScript
имеет свои особенности. Некоторые из них, разработанные с позиций языков со строгим контролем типов, таких как C++ и Java, не могут непосредственно применяться в языках с динамической типизацией, таких как JavaScript.
Для таких Шаблонов в языке JavaScript имеются более простые альтернативы.
Написанная экспертом по языку JavaScript Стояном Стефановым – ведущим
специалистом компании Yahoo! и создателем инструмента оптимизации производительности веб-страниц YSlow 2.0, – книга включает практические советы по реализации каждого из рассматриваемых шаблонов с примерами программного кода. Автор также приводит антишаблоны – приемы программирования, которых следует по возможности избегать.
Кол-во страниц:264
Язык:Русский
Издательство:Символ-Плюс
Предисловие 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
Преобразование строки в число с помощью parseInt() 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
Дополнения в стандарте ECMAScript5 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
Местоположение элемента