Современная Front-End разработка. Объектно-ориентированное программирование в JavaScript. (Лекция 4)

Содержание

Слайд 2

Работа с DOM Есть такой фрагмент html: Из JavaScript кода мы

Работа с DOM

Есть такой фрагмент html:

Из JavaScript кода мы имеем полный

доступ к нему с помощью глобального объекта document:
Слайд 3

Работа с DOM Из JS мы можем менять аттрибуты элементов: Вешаем

Работа с DOM

Из JS мы можем менять аттрибуты элементов:

Вешаем события на

кнопку:

Важно: нельзя повесить несколько событий onclick на элемент, они будут переопределяться.

Слайд 4

DOM события На элемент лучше вешать события с помощью метода addEventListener(type,

DOM события

На элемент лучше вешать события с помощью метода addEventListener(type, eventListener),

порядок вызова слушателей определяется их объявлением:

Удаляются события с помощью метода
removeEventListener(type, eventListener), где eventListener – ранее привязанная функция:

Слайд 5

DOM события В функцию eventListener передается аргумент event, содержащий информацию по

DOM события

В функцию eventListener передается аргумент event, содержащий информацию по событию,

а также ряд методов:

Фунцкия event.stopPropagation используется, чтобы остановить вызов последующих слушателей

Слайд 6

Поиск элементов в DOM Для поиска элементов в DOM дереве можно

Поиск элементов в DOM

Для поиска элементов в DOM дереве можно пользоваться

функциями поиска:
document.getElementById(id) – возвращает элемент с заданным id или null, если элемент не найден
document.getElementsByClassName(class) – возвращает массив элементов с заданным именем класса, можно использовать несколько имен:
document.getElementsByClassName('red test') – вернет все элементы с классами “red” и “test”
document.querySelector(selectors) – возвращает первый попавшийся элемент, удовлетворяющий селектору, либо null и document.querySelectorAll(selectors) – возвращает массив, удовлетворяющих элементов:
document.querySelectorAll(“.red.test”) - результат аналогичен предыдущему примеру с className
Слайд 7

Изменение и добавление элементов в DOM Создание новых элементов: Клонирование элементов:

Изменение и добавление элементов в DOM

Создание новых элементов:

Клонирование элементов:

NOTES:
Клонированные элементы

не добавляются в DOM, чтобы это сделать, используется appendChild()
Свойства добавленные через JS-код(например onclick) не копируются
Слайд 8

AJAX Объект XMLHttpRequest (или, как его кратко называют, «XHR») дает возможность

AJAX

Объект XMLHttpRequest (или, как его кратко называют, «XHR») дает возможность из

JavaScript делать HTTP-запросы к серверу без перезагрузки страницы.
Слайд 9

AJAX Предыдущий вариант использования делает синхронный запрос, весь JavaScript "подвиснет", пока

AJAX

Предыдущий вариант использования делает синхронный запрос, весь JavaScript "подвиснет", пока запрос

не завершится, поэтому почти всегда используется асинхронная версия XHR:
Слайд 10

AJAX Состояния запроса(readyState): 0; // начальное состояние 1; // вызван open

AJAX

Состояния запроса(readyState):
0; // начальное состояние
1; // вызван open
2; // получены заголовки
3;

// загружается тело (получен очередной пакет данных)
4; // запрос завершён
Работа с заголовками:
setRequestHeader(name, value) – задает заголовок запроса с именем name
getResponseHeader(name) – возвращает заголовок ответа по имени
getAllResponseHeaders() - возвращает все заголовки ответа
Слайд 11

Наследование в JavaScript На уровне языка реализовано наследование на прототипах. С

Наследование в JavaScript

На уровне языка реализовано наследование на прототипах. С помощью

некоторых трюков можно сделать наследование на классах, объявить приватные свойства объекта и многое другое.

Создание объекта. Функция-конструктор

Любая функция может создать объект:
Класс объекта определяется функцией, которая его создала. Для проверки принадлежности классу есть оператор instanceof:
alert(animal instanceof Animal) // => true

Слайд 12

Наследование через прототип Реализуется наследование через неявную(внутреннюю) ссылку одного объекта на

Наследование через прототип

Реализуется наследование через неявную(внутреннюю) ссылку одного объекта на другой,

который называется его прототипом и в спецификации обозначается [[prototype]]. Это свойство обычно скрыто от программиста.
Также существует свойство с похожим названием prototype (без квадратных скобок) - оно вспомогательное и указывает, откуда брать прототип при создании объекта.
Когда вы ставите функции Animal свойство Animal.prototype = XXX - вы этим декларируете: "все новые объекты класса Animal будут иметь прототип XXX".

Ссылка [[prototype]] работает так:
Любое запрошенное свойство ищется сначала в rabbit
Если свойство там не найдено, то оно ищется в rabbit.[[prototype]], т.е в animal

Слайд 13

Наследование через прототип Расширяем прототип функции-конструктора:

Наследование через прототип

Расширяем прототип функции-конструктора:

Слайд 14

Наследование на классах. Функция extend В качестве решения для полноценного наследования,

Наследование на классах. Функция extend

В качестве решения для полноценного наследования, используется

функция extend, которая является почти стандартом:
Слайд 15

Вызов родительских методов С помощью функции extend легко получить доступ к родительским методам:

Вызов родительских методов

С помощью функции extend легко получить доступ к родительским

методам:
Слайд 16

Вызов родительских методов Обязательно следить за контекстом, в данном случае использование

Вызов родительских методов

Обязательно следить за контекстом, в данном случае использование this

вместо Rabbit приведет к ошибке:
Слайд 17

Использование прототипов для расширения функционала Задача: нужно логировать время старта и

Использование прототипов для расширения функционала

Задача: нужно логировать время старта и время

окончания AJAX запросов по URL.
Слайд 18

Домашнее задание Примечание: для работы с файлами нужно запустить браузер со

Домашнее задание

Примечание: для работы с файлами нужно запустить браузер со специальным

параметром например для chromium:
chromium --allow-file-access-from-files
Задание
Cоздаем два файла: posts.json и users.json в корне проекта и заполняем их тестовыми данными, модели:
Слайд 19

Домашнее задание Необходимо обернуть XMLHttpRequest в сервис httpService, который экпортирует метод

Домашнее задание

Необходимо обернуть XMLHttpRequest в сервис httpService, который экпортирует метод get(url,

callback). Пример использования:
Реализовать модуль userService. Экпортирует фукнцию getUserById, которая возвращает id
Создать функцию конструктор Post, интерфейс: