10 тем JavaScript, которые я узнал сегодня впервые —
1. Объектно-ориентированное программирование (ООП)
Объектно-ориентированное программирование — это стиль программирования, основанный на коллекциях классов и объектов. Ряд объектов наследует класс, и объекты могут общаться между собой.
Три основные концепции ООП:
- Наследование
- Инкапсуляция
- Полиморфизм.
2. «Класс» в ООП
В объектно-ориентированном программировании класс — это набор свойств и методов. Это также считается «планом» в ООП. В ES6 класс должен быть объявлен с ключевым словом class
. Начальная буква имени класса — заглавная. Внутри {} мы объявляем свойства (в функции-конструкторе) и методы. А объект — это конкретный экземпляр класса, который начинается с ключевого слова new
перед именем класса.
Пример -
class Car { constructor(name, model, color) { this.name = name; this.model = model; this.color = color; } start() { console.log("Starting") } stop() { console.log("Stop here") } }
В приведенном выше примере Car
представляет собой набор свойств (имя, модель и цвет) и методов (start(), stop()). Итак, Car
здесь класс.
3. «Объект» в ООП
Объект — это конкретный экземпляр класса, который начинается с ключевого слова new
перед именем класса.
Пример -
const car1 = new Car('BMW', 'M-2321', 'black')
Здесь car1 — это объект.
4. Наследование
Наследование — это функция, представляющая отношения разных классов. Для этого свойства класса могут быть повторно использованы в другом классе.
class Product { constructor(name, price) { this.name = name; this.price = price; } } class Book extends Product { constructor(author) { super(name, price); this.author = author; } }
В этом примере свойства name и price класса Product повторно используются в классе Book.
5. Инкапсуляция
Инкапсуляция означает сокрытие ненужных деталей от любого пользователя. Это предотвращает доступ к данным через функцию в объекте.
Пример -
function Person(name, age) { this.name = name; this.age = age; this.walk = function() { console.log('Walking on foot'); } const testPerson = new Person("sayed", 22); console.log(testPerson.name); console.log(testPerson.walk());
Здесь мы получаем доступ к методу walk() через функцию. Мы не даем прямого доступа к тому, как работает walk(). Это инкапсуляция.
6. Полиморфизм
Полиморфизм можно объяснить таким образом, чтобы можно было выполнять одно и то же действие в разных формах. Это означает, что он дает нам возможность вызывать один и тот же метод для многих объектов JavaScript.
Пример -
call Product { construct(name, price, amount) { this.name = name; this.price = price; this.amount = amount; } getTotal() { let total = this.amount * this.price; console.log(total); } } class Book extends Product { constructor(name, price) { super(name, price) } getTotal() { let total = this.price * this.amount; let totalWithoutDiscount = total - 0.10 * total; console.log(getTotal); } }
7. Стек вызовов
Стек вызовов работает как стек, как структура данных. Это означает следовать — последний пришел, первый ушел (LIFO) во время выполнения.
Пример -
function test() { console.log("this is test") } function test1() { return test(); } function test2() { return test1(); } test2();
Здесь, когда мы вызываем test2(), он переходит в стек вызовов поверх main(). затем он вызывает test1(), а test1() вызывает test(). Но test() выполняется первым.
8. Функция высшего порядка
Функция, которая может принимать другую функцию в качестве аргумента или возвращать функцию в качестве результата, называется функцией высшего порядка. В JavaScript есть несколько функций высшего порядка. map(), filter(), reduce() также являются функциями высшего порядка.
Пример -
const arr = [10,20,30,40]; const result = arr.reduce((x, y) => x + y, 0); console.log(result); //100
9. Чистая функция
Функции, которые принимают аргументы и возвращают значение без каких-либо изменений, выходят за его рамки и не могут вызывать никаких побочных эффектов.
Пример -
function getSum(a,b) { return a + b; }
10. Нечистая функция
Функции, которые возвращают значение с изменением данных за пределами своей области, называются нечистыми функциями.
Пример -
let vat = 15/100; function getTotal(price, number) { return (price * number) + (price * number * vat); } getTotal();
здесь функция getTotal() зависит от внешней переменной 'vat' вне ее области видимости. Итак, это нечистая функция.
Это все на сегодня.
Спасибо за чтение…