Черновик
Ruslan TrybukhouskiИНКАПСУЛЯЦИЯ
Термин 1. Соединение методов и данных
Термин 1. Сокрытие внутренней структуры объекта от внешних воздействий.
Суть инкапсуляции заключается в том, что объект не должен изменяться ничем, кроме собственных методов.
НАСЛЕДОВАНИЕ
Термин. Принцип, при котором один класс может наследовать (использовать) свойства и методы другого класса.
Виды наследования:
- Одиночное
Класс наследуется от одного класса - Множественное
Класс наследуется от многих классов
Прототипы, классы, конструкторы
class - это шаблон для добавления объектов
У каждого объекта есть свойство constructor, которое указывает на функцию, в которой этот объект был создан.
Синтаксис: constructor() {}
Пример:
указать, как new object берет свойства у прототипа
У конструктора всегда есть пустой объект prototype.
При наполнении prototype свойствами, мы автоматически наполняем свойствами и все экземпляры данного конструктора.
Эти свойства будут храниться не напрямую в объектах, а в служебном свойстве Proto, которое создается всегда
Прототипы
ВСЕ объекты в JS наследуются.
Как минимум от другого объекта.
Объект, от которого произошло наследование называется прототипом.
Унаследованные свойства могут быть найдены в объекте prototype конструктора.
Свойством prototype можно добавить свойство к ранее определенному ТИПУ объекта. Таким образом создается свойство, единое для всех объектов данного типа, а не одного экземпляра этого типа объекта.
Пример: Добавляем свойство color ко всем объектам типа car, а затем присваиваем значение этому свойству у объекта car1.
Унаследование прототипа
extends
Синтаксис:
class dog extends animals (animals - прототип)
Классически все свойства у прототипа, все свойства - у объекта.
Источники для повторого анализа
Добавить ссылки на интересные методы из видео:
-добавить свойства без дублирования в экземплярах и т.д.
-др.
видео
ПОЛИФОРМИЗМ
Термин. Способность функции работать с данными разных типов.
Пр.: Методы 'лететь' 'бежать', 'ехать' заменяются единым 'переместить', которые подсраивается под конкретный объект.
Виды полиморфизма:
- По запросу (ad-hoc)
- Параметрический
Все if в программе можно заменить на полиморфизм.
ООП
Курс по ООП здесь
МЕТОДЫ
- throw new
- .test
- [...n]
- hoisting
- rest / spread
- Итераторы / генераторы
- Промисы
- Reflect
- асинхронность
- entries
- padStart +
- .flat
- optional
- assign
Как перевернуть массив?
.reverse()
Как объединить элементы массива в строку?
.join()
В скобках следует указать тип разделителя.
Как вернуть квадратный корень числа?
Math.sqrt()
Как вернуть уникальные значения строки или массива?
new Set(итерируемый объект)
Видоизменить массив применив указанную функцию к каждому элементу массива
.map(el => el(то, что делать с элементом)) Пример: .map(el => el * 2)
Как разбить строку на массив?
.split()
В скобках - элемент, на основе которого делать разбивку (элемент удаляется)
Как объединить несколько объектов?
- object.assign(obj1, obj2)
Также можно этим методом добавлять другие значения:
object.assign(obj1, obj2, {
a:2,
b: 3})
ОБЪЕКТЫ
Перебор простых объектов
- Object.keys(objectName)
Возвращает массив ключей.
Пример:
- Object.values(objectName)
Возвращает массив значений.
Пример:
- Object.entries(objectName)
Возвращает массив пар [ключ, значение].
Пример:
- Переборы циклом
Описанные выше методы могут быть полезны для перебора значений в цикле.
Пример:
Трансформация объекта
Объекты не имеют большого количество методов, в отличие от массивов, однако их можно "украсть".
Для этого необходимо:
1.К методу Object.entries присовокупить желаемый метод из массива.
2.Полученную конструкцию вернуть обратно в простой объект, применив функцию Object.fromEntries().
Пример:
Перебор всех свойств объекта
- Цикл for...in
Для перебора всех свойств объекта используется цикл for..in.
Цикл for..in отличается от цикла for(;;).
Синтаксис:
Пример. Вывод всех свойств объекта user.
Примечание! Конструкции «for» позволяют объявлять переменную внутри цикла (как let key в примере выше).
- Object.keys(o)
Этот метод возвращает массив со всеми собственными (те, что в цепочке прототипов, не войдут в массив) именами перечисляемых свойств объекта o.
Пример:
- Object.getOwnPropertyNames(o)
Этот метод возвращает массив содержащий все имена своих свойств (перечисляемых и неперечисляемых) объекта o.
https://behemothoz.gitbooks.io/js-learn/content/object/perechislyaemie-i-neperechislyaemie-svoistva.html
ГЕТТЕРЫ И СЕТТЕРЫ
Зачем нужны
Это функции, которые используются для присвоения и получения значения.
Во внешнем коде они выглядят как обычные свойства объекта.
Свойства объекта в сущности являются теми же самыми переменными JS, за тем исключением, что они закреплены за объектом
Геттер ("получить" (англ.)) — метод, который получает значение определенного свойства. Предназначен для чтения.
Сеттер ("присвоить" (англ.)) — метод, который присваивает значение определенному свойству объекта. Предназначен для записи.
Аксессоры не работаю с delete.
Геттер только выводит информацию. Ему нельзя присвоить другое значение, перезаписав.
Сеттер принимает одно значение. Для присвоения свойству.
Определение геттеров и сеттеров
При объявлении объекта они обозначаются get и set
Геттер и сеттер можно присвоить для любого объекта (встроенного либо явно определенного), поддерживающего добавление новых свойств.
Геттер читается не как функция, а как обычное свойство. Мы не вызываем user.fullName как функцию, а читаем как обычное свойство: геттер выполнит всю работу за кулисами. - в этом и заключается смысл аксессоров.
МАССИВЫ
АНИМАЦИЯ
Удаление из DOM анимирующего выполненного CSS-класса: -->
Добавление класса, выключающего анимацию, с целью ее включения: -->
КОНТЕКСТ
This
- специальное ключевое слово внутри метода, использующееся для ссылки на текущий объект.
-это ключевое слово, используемое в JavaScript, которое имеет особое значение, зависящее от контекста в котором оно применяется.
-это ссылка на текущий объект
Контекст this меняется в зависимости от его использования.
Когда мы пользуемся ключевым словом this, мы, на самом деле, обращаемся с его помощью к некоему объекту
Если вы попытаетесь обратиться к ключевому слову this в глобальной области видимости, оно будет привязано к глобальному контексту, то есть — к объекту window в браузере.
При использовании функций, которые имеются в глобальном контексте (это отличает их от методов объектов) ключевое слово this в них будет указывать на объект window.
Пр. Просто консоль браузера.
Когда this используется внутри объекта, это ключевое слово ссылается на сам объект.
Пример:
В стрелочных функциях this всегда относится к глобальному контексту (к объекту window).
Дополнить раздел от Использование this в обычных функциях https://habr.com/ru/company/ruvds/blog/419371/
ОПРЕДЕЛЕНИЯ
Функциональный аргумент (Functional argument, “Funarg”, “Фунарг”) — аргумент, значением которого является функция.
Функции высшего порядка (ФВП, higher-order functions, HOF. функционалы) - функции, принимающие функциональные аргументы.
Функции с функциональным значением (function valued functions) - функции, возвращающие функции.
Функциональные аргументы, функционалы и функции с функциональным значением, называются функциями первого класса (first-class functions) или более обще — объекты первого класса (first-class objects)
Свободная переменная (Free variable) — переменная, используемая функцией, но не являющаяся ни параметром, ни локальной переменной этой функции.
Лексическая область видимости (лексический контекст, lexical scope, лексическое (статическое) связывание) - локальная область видимости функции ограничена текстом определения этой функции (имя переменной имеет значение внутри тела функции и считается неопределённым за его пределами).
Динамическая область видимости (динамический контекст, динамическое связывание) - локальная область видимости ограничена временем исполнения функции (имя доступно, пока функция выполняется, и исчезает, когда функция возвращает управление вызвавшему её коду).