Чтобы понять концепцию ООП в javascript, мы должны знать эти четыре типа механизмов:

  • Объект
  • Классы
  • Инкапсуляция
  • Наследование
  1. Что такое объект

Объект — это уникальный объект, который содержит свойство и методы. Допустим, если человек является Объектом, то его имя, фамилия, адрес, номер телефона являются свойствами Объекта. И используя эти свойства, мы можем делать любые действия, какие захотим, что называется методом Object. В JavaScript почти каждый элемент является объектом, будь то функция, массив или строка.

Примечание. Метод в JavaScript — это свойство объекта, значением которого является функция.

2.Создание объекта с использованием литерала объекта

Объект можно создать тремя способами в javascript. Первый использует объектный литерал.

Пример:

Внутри объекта мы можем определить свойства объекта, методы и другой объект, используя фигурные скобки {}. В нашем случае person — это объект с двумя свойствами firstname и lastName. , метод getFunction(), который возвращает имя и фамилию человека и другое свойство address, которое является объектом внутри объекта person.

3. Создание объекта с помощью конструктора объектов

Пример:

В этом примере мы создаем экземпляры объекта person person1 и person2, используя ключевое слово new. Когда мы создаем экземпляры объекта, метод constructor запускается для этого объекта, присваивая переданные в него значения свойствам исходного объекта. Затем мы можем получить доступ к значениям свойств исходного объекта через эти экземпляры.

4. Создание объекта с помощью метода Object.create()

Пример:

Вывод:

Меня зовут Мусуми. Я играю?: правда

Метод Object.create() создает новый объект, используя существующий объект в качестве прототипа вновь созданного объекта.

5. Класс

Классы — это схема объекта. У класса может быть много объектов, поскольку класс является шаблоном, а объект — экземплярами класса. в JavaScript нет классов. У нас есть только Object.

JavaScript — это объектно-ориентированный язык, основанный на прототипах, что означает, что он не имеет классов, а определяет поведение с помощью функции конструктора, а затем повторно использует его с помощью прототипа.

Синтаксис объявления класса:

Раньше в случае создания объекта с использованием конструктора тело функции выступало в качестве конструктора, в котором определены все свойства, тогда как в случае реализации класса внутри класса была определена отдельная функция-конструктор, используемая для инициализации свойств.

6. Создание экземпляра объекта из класса

Поскольку человек сам является функцией-конструктором, метод создания экземпляра объекта из класса точно такой же, как описано выше. Ключевое слово new используется для инициализации нового объекта person1. Затем для этого объекта запускается метод constructor, присваивая переданные в него значения свойствам.

Определение методов в классе

Пример:

В этом примере

  • Функция getlastName() определяется вне конструктора.
  • Все такие методы хранятся в объекте-прототипе человека.
  • Итак, новый объект, такой как person1, имеет доступ ко всем методам, определенным в классе.
  • При вызове person1 метод getlastname() берется из person.prototype.

7. Инкапсуляция

Процесс обертывания свойств и функцийв пределах одного блока называется инкапсуляцией. Инкапсуляция предотвращает доступ к данным, кроме как через функции объекта.

Пример:

Вывод:

Меня зовут Мусуми, адрес: Дакка

В приведенном выше примере мы просто создаем экземпляр объекта person и с помощью конструктора инициализируем его свойства, а также используем его функции. Мы не беспокоимся о деталях реализации. Но это не самый надежный и безопасный способ.

Объекты должны иметь исключительный контроль над своими данными. Другими словами, объекты «инкапсулируют» свои данные и предотвращают прямой доступ других объектов к данным. Единственный способ доступа к данным должен быть косвенным через функции, записанные в объекты.

Иногда под инкапсуляцией понимается сокрытие данных или абстракция данных, что означает представление основных функций, скрывающих фоновые детали.

Пример:

В этом примере мы можем получить доступ к свойствам через функцию, которая доступна, но не напрямую.

8. Наследование

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

Пример:

В приведенном выше примере мы определяем класс person с определенным свойством и методом, а затем наследуем класс person в классе student, используя extends. ключевое слово и использовать все свойства и методы класса person.

Примечание. Здесь person — это родительский класс, а student — дочерний класс person. Когда мы наследуем любой метод родительского класса в дочернем классе, мы используем ключевое слово super.

9.Стек вызовов

Это структура данных, которая записывает вызовы функций, в основном в той части программы, где мы находимся. Если мы вызываем функцию для выполнения, мы помещаем что-то в стек, а когда мы возвращаемся из функции, мы сталкиваемся с вершиной стека.

Сначала ищем основную функцию, с которой начнется все выполнение. В приведенном выше примере он начинается с console.log(bar(6)), который помещается в стек, следующий кадр поверх него — это функция bar с ее аргументы, которые, в свою очередь, вызывают функцию foo, которая снова помещается на вершину стека и немедленно возвращается, и поэтому выталкивается из стека, аналогично бар затем выталкивается, и, наконец, оператор консоли выталкивается, печатая выход. Все это происходит (в мс) по одному.

10. Цикл событий

Event Loop имеет довольно специфическую работу. Он проверяет, пуст стек вызовов или нет. Если стек вызовов пуст, он поместит задачу в стек вызовов из очереди, и задача будет обработана.

Порядок выполнения стека вызовов JavaScript, цикла событий и любых веб-API в среде выполнения JS показан ниже:

setTimeout(() =› {
console.log('hi')
}, 1000);

Как этот код работает в среде js?

Для начала все пусто.

Он начинает выполнение кода и помещает этот факт в стек вызовов (здесь он называется <global>).

Затем будет выполнена первая строка. Это помещает выполнение функции в качестве второго элемента в стек вызовов.

Выполнение setTimeout фактически вызывает код, который не является частью JS. Это часть веб-API, которую предоставляет нам браузер. В node.

setTimeout завершает выполнение; он перенес свою работу в веб-API, который будет ждать запрошенное количество времени (1000 мс).

Поскольку больше нет строк JS для выполнения, стек вызовов теперь пуст.

По истечении времени ожидания веб-API сообщает об этом JS, добавляя код в цикл событий. Он не загружается напрямую в стек вызовов, поскольку это может помешать уже выполняющемуся коду, и вы окажетесь в странных ситуациях. Цикл событий — это очередь. Первый предмет, который нажат, является первым предметом, который выскочил.

Всякий раз, когда стек вызовов пуст, среда выполнения JS время от времени проверяет, не находится ли что-либо в очереди в цикле событий. Если это так, первый элемент перемещается в стек вызовов для выполнения.

Выполнение функции приводит к вызову console.log, который также помещается в стек вызовов.

После завершения выполнения печатается hi, а console.log удаляется из стека вызовов.

Наконец, у функции нет других команд для выполнения, поэтому она также удаляется из стека вызовов.