Оглавление
    Предисловие
    Глава 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
    В заключение
    Алфавитный указатель