Содержание

Часть 1. Prototype
Глава 1. Что следует знать о Prototype, JavaScript, и DOM . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
    Всё в JavaScript является объектом . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
Структура DOM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
   Сложность написания межплатформенного кода JavaScript . . . . . . . . . . . . . . . . . . . . . . . . .
8
   Сложность отладки межплатформенного кода JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
Об этой книге . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
   Firefox использовался почти во всех примерах . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
   Сначала теория, потом практика . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
Библиотека Prototype . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
   Философия Prototype . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
   Цели и возможности Prototype . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
   Веб-сайт Prototype . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
   Содействие развитию Prototype . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
   Начало работы с Prototype. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
      Создание страницы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
      Загрузка Prototype . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
      Подключение Prototype . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
      Тестирование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
 
Глава 2. Основы Prototype . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
Начало работы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
Функция $ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
   В функцию $ можно передавать и строки и узлы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
   В функцию $ можно передавать множество параметров. . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
   Функция $ наделяет узлы DOM полезной фунциональностью. . . . . . . . . . . . . . . . . . . . . . . .
20
Метод Object.extend: безболезненное объединение объектов . . . . . . . . . . . . . . . . . . . . . . . . .
21
Функция $A: приведение коллекций к массивам . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
   Переменная arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
   Коллекция DOM NodeList. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
Функция $$: формирование сложных запросов узлов DOM . . . . . . . . . . . . . . . . . . . . . . . . . .
26
Резюме. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
 
Глава 3. Коллекции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
Традиционный цикл for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
Функциональное программирование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
32
Объект Enumerable. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
34
   Метод Enumerable#each. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
34
Поиск иголок в стогах сена: методы detect, select, reject и partition . . . . . . . . . . . . . . . . . . . . .
35
   Метод Enumerable#detect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
   Метод Enumerable#select. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
   Метод Enumerable#reject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
   Метод Enumerable#partition. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
Сортировка коллекций: методы min, max и sortBy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
   Методы Enumerable#min и #max . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
   Методы Enumerable#sortBy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
Расширенные методы перечисления: map, inject, invoke и pluck . . . . . . . . . . . . . . . . . . . . . . .
38
   Методы Enumerable#map и Enumerable#inject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
38
   Методы Enumerable#pluck и Enumerable#invoke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
40
Другие коллекции, которые используют Enumerablee . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
41
   Класс Hash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
41
   Класс ObjectRange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45
   Преобразование коллекций в массивы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
46
   Использование Enumerable в пользовательских коллекциях . . . . . . . . . . . . . . . . . . . . . . . .
46
Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
48
 
Глава 4. Ajax : эффективное клиент-серверное взаимодействие. . . . . . . . . . . . . . . . . . . . . . .
49
Достоинства Ajax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
49
Недостатки Ajax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
50
Объект Ajax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
50
   Класс Ajax.Request. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
52
   Класс Ajax.Updater . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
56
   Класс Ajax.PeriodicalUpdater . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
60
   Управление потоком запросов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
60
Расширенные примеры: работа с динамическим содержимым. . . . . . . . . . . . . . . . . . . . . . . .
62
   Пример 1: Blog (Breakfast Log). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
62
   Пример 2: Fantasy Football . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
74
Резюме. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
89
 
Глава 5. События . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
91
Текущее положение дел в мире броузеров (Или что мы имеем на сегодняшний день) . . . . . .
91
   Что было до DOM, часть 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
91
   Что было до DOM, часть 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
92
События: интенсивный курс . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
94
   Методы Event#stopPropagation, Event#preventDefault и Event#stop . . . . . . . . . . . . . . . . . . . .
99
   Дополнительный пример . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
101
События и формы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
102
   Проверка данных на стороне клиента . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
102
   Очистка кода . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
107
Пользовательские события . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
108
   Первое пользовательское событие . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
109
   Широковещательная передача информации о счете . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
109
   Прослушивание счета . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
110
Резюме. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
111
 
Глава 6. Работа с DOM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
113
DOM API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
113
Генеалогия узлов DOM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
113
Расширения DOM в Prototype . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
115
   Изменение DOM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
115
   Обход и сбор . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
128
   Создание узлов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
132
Собираем все вместе . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
135
Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
137
 
Глава 7. Современный JavaScript: функциональное и объектно-ориентированное
программирование
139
Объектно-ориентированное программирование JavaScript и Prototype . . . . . . . . . . . . . . . . . . .
139
   Почему ООП? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
139
   Пространство имен . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
141
   Использование классов. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
142
   Паттерн DOM Behavior . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
148
Функциональное программирование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
158
   У функций могут быть свои собственные методы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
159
   Метод Function#curry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
159
   Методы Function#delay и Function#defer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
161
   Метод Function#bind . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
164
Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
165
 
Глава 8. Дополнительный инструментарий: вспомогательные встроенные методы . . . . . . . . .
167
Строковые методы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
167
   Вспомогательные строковые методы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
167
   Класс Template и строковая интерполяция . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
176
JSON. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
180
   На что похож JSON? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
180
   Почему JSON? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
181
   Сериализация с помощью метода Object.toJSON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
181
   Десериализация с помощью метода String#evalJSON. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
182
   Переопределение заданной по умолчанию сериализации . . . . . . . . . . . . . . . . . . . . . . . . . .
183
Методы Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
184
   Определение типов с помощью методов Object.isXXX . . . . . . . . . . . . . . . . . . . . . . . . . . . .
184
Методы объекта Array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
188
   Методы reverse и clear. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
188
   Методы uniq и without . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
189
Резюме. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
189
 

предыдущая    следующая страница

 

Hosted by uCoz