Предисловие
Глава 1. Введение
Шаблоны
JavaScript: концепции
JavaScript - объектно-ориентированный язык
В JavaScript отсутствуют классы
Прототипы
Среда выполнения
ECMAScript 5
JSLint
Консоль
Глава 2. Основы
Создание простого в сопровождении программного кода
Минимизация количества глобальных переменных
Проблемы, связанные с глобальными переменными
Побочные эффекты, возникающие в отсутствие объявления var
Доступ к глобальному объекту
Шаблон единственной инструкции var
Подъем: проблемы с разбросанными переменными
Циклы for
Циклы for-in
Расширение встроенных прототипов
(в том числе нежелательное)
Шаблон switch
Избегайте неявного приведения типов
Не используйте eval()
Преобразование строки в число с помощью parseInt()
Соглашения по оформлению программного кода
Отступы
Фигурные скобки
Местоположение открывающей скобки
Пробелы
Соглашения по именованию
Заглавные символы в именах конструкторов
Выделение слов
Другие шаблоны именования
Комментарии
Документирование API
Пример использования YUIDoc
Пишите так, чтобы можно было читать
Оценка коллегами
Сжатие при подготовке к эксплуатации
Запуск JSLint
В заключение
Глава 3. Литералы и конструкторы
Литералы объектов
Синтаксис литералов объектов
Создание объектов с помощью конструкторов
Недостатки конструктора Object
Собственные функции­конструкторы
Значения, возвращаемые конструкторами
Шаблоны принудительного использования new
Соглашения по именованию
Использование ссылки that
Конструкторы, вызывающие сами себя
Литералы массивов
Синтаксис литералов массивов
Странности конструктора Array
Проверка массивов
JSON
Обработка данных в формате JSON
Литералы регулярных выражений
Синтаксис литералов регулярных выражений
Объекты-обертки значений простых типов
Объекты Error
В заключение
Глава 4. Функции
Основы
Устранение неоднозначностей в терминологии
Объявления и выражения: имена и подъем
Свойство name функций
Подъем функций
Функции обратного вызова
Пример использования функции обратного вызова
Функции обратного вызова и их области видимости
Обработчики асинхронных событий
Предельное время ожидания
Функции обратного вызова в библиотеках
Возвращение функций
Самоопределяемые функции
Немедленно вызываемые функции
Параметры немедленно вызываемых функций
Значения, возвращаемые немедленно
вызываемыми функциями
Преимущества и особенности использования
Немедленная инициализация объектов
Выделение ветвей, выполняющихся на этапе инициализации
Свойства функций - шаблон мемоизации
Объекты с параметрами
Каррирование
Применение функций
Частичное применение
Каррирование
Когда использовать каррирование
В заключение
Глава 5. Шаблоны создания объектов
Пространство имен
Универсальная функция для создания пространства имен
Объявление зависимостей
Частные свойства и методы
Частные члены
Привилегированные методы
Нежелательный доступ к частным членам
Частные члены и литералы объектов
Частные члены и прототипы
Объявление частных функций общедоступными методами
Шаблон "модуль"
Шаблон открытия модуля
Модули, создающие конструкторы
Импортирование глобальных переменных в модули
Шаблон изолированного пространства имен
Глобальный конструктор
Добавление модулей
Реализация конструктора
Статические члены
Общедоступные статические члены
Частные статические члены
Объекты-константы
Шаблон цепочек
Достоинства и недостатки шаблона цепочек
Метод method()
В заключение
Глава 6. Шаблоны повторного использования
программного кода
Классические и современные шаблоны наследования
Ожидаемый результат при использовании
классического наследования
Классический шаблон №1: шаблон по умолчанию
Обход цепочки прототипов
Недостатки шаблона №1
Классический шаблон №2: заимствование конструктора
Цепочка прототипов
Множественное наследование при заимствовании конструкторов
Достоинства и недостатки шаблона заимствования конструктора
Классический шаблон №3: заимствование и установка прототипа
Классический шаблон №4: совместное использование прототипа
Классический шаблон №5: временный конструктор
Сохранение суперкласса
Установка указателя на конструктор
Функция klass()
Наследование через прототип
Обсуждение
Дополнения в стандарте ECMAScript 5
Наследование копированием свойств
Смешивание
Заимствование методов
Пример: заимствование методов массива
Заимствование и связывание
Function.prototype.bind()
В заключение
Глава 7. Шаблоны проектирования
Единственный объект
Использование оператора new
Экземпляр в статическом свойстве
Экземпляр в замыкании
Фабрика
Встроенная фабрика объектов
Итератор
Декоратор
Пример использования
Реализация
Реализация с использованием списка
Стратегия
Пример проверки данных
Фасад
Прокси­объект
Пример
Прокси­объект как кэш
Посредник
Пример использования шаб­лона посредника
Наблюдатель
Пример 1: подписка на журнал
Пример 2: игра на нажатие клавиш
В заключение
Глава 8. Шаблоны для работы с деревом DOM и броузерами
Разделение на составные части
Работа с деревом DOM
Доступ к дереву DOM
Манипулирование деревом DOM
События
Обработка событий
Делегирование событий
Сценарии, работающие продолжительное время
setTimeout()
Фоновые вычисления (web workers)
Удаленные взаимодействия
XMLHttpRequest
Формат JSONP
Обмен данными с использованием фреймов и изображений
Развертывание сценариев JavaScript
Объединение сценариев
Сжатие и компрессия
Заголовок Expires
Использование CDN
Стратегии загрузки
Местоположение элемента
Фрагментирование средствами HTTP
Динамические элементы для неблокирующей
загрузки сценариев
Отложенная загрузка
Загрузка по требованию
Предварительная загрузка сценариев JavaScript
В заключение
Алфавитный указатель