JavaRush /Курси /Frontend SELF UA /Знайомство з прототипами

Знайомство з прототипами

Frontend SELF UA
Рівень 39 , Лекція 2
Відкрита

3.1 Концепція прототипів

Прототипи є однією з ключових концепцій у JavaScript, даючи можливість об'єктам наслідувати властивості й методи від інших об'єктів. На відміну від багатьох інших мов програмування, де наслідування реалізоване через класи, у JavaScript воно базується на прототипах. Зараз ми розглянемо, що таке прототипи, як вони працюють і як їх можна використовувати.

Прототип у JavaScript — це об'єкт, від якого інші об'єкти можуть наслідувати властивості й методи. Кожен об'єкт у JavaScript має приховане посилання на інший об'єкт — приховану властивість [[Prototype]], яке вказує на його прототип.

Цей прототип може мати свої власні прототипи, утворюючи ланцюжок прототипів (prototype chain). Властивості й методи об'єкта можуть бути успадковані через цей ланцюжок. Це дозволяє об'єктам ділитися функціональністю і створювати ієрархії об'єктів.

Властивість proto

У JavaScript у кожного об'єкта є властивість __proto__, яке вказує на його прототип. Це властивість використовується для пошуку властивостей і методів, якщо вони не знайдені в самому об'єкті.

У цьому прикладі об'єкт child наслідує метод greet() від об'єкта parent:

JavaScript
    
      const parent = {
        greet() {
          console.log('Привіт від батька');
        }
      };

      const child = {
        __proto__: parent
      };

      child.greet(); // Виведе: Привіт від батька
    
  

3.2 Створення і використання прототипів

1. Object.create()

Метод Object.create() дозволяє створити новий об'єкт із вказаним прототипом.

Приклад:

JavaScript
    
      const parent = {
        greet() {
          console.log('Привіт від батька');
        }
      };

      const child = Object.create(parent);
      child.greet(); // Виведе: Привіт від батька
    
  

2. Додавання властивостей і методів у прототип

Властивості й методи можна додати в прототип, щоб вони були доступні всім об'єктам, які його наслідують.

У цьому прикладі метод speak() додається в прототип animal і доступний об'єкту dog:

JavaScript
    
      const animal = {
        speak() {
          console.log(`${this.name} видає звук.`);
        }
      };

      const dog = Object.create(animal);
      dog.name = 'Buddy';
      dog.speak(); // Виведе: Buddy видає звук.
    
  

3. Зміна прототипу об'єкта

Прототип об'єкта можна змінити за допомогою методу Object.setPrototypeOf().

У цьому прикладі прототип об'єкта duck змінюється з animal на bird:

JavaScript
    
      const animal = {
        speak() {
          console.log('Тварина говорить');
        }
      };

      const bird = {
        fly() {
          console.log('Птах летить');
        }
      };

      const duck = {
        __proto__: animal,
        quack() {
          console.log('Качка крякає');
        }
      };

      Object.setPrototypeOf(duck, bird);
      duck.fly();   // Виведе: Птах летить
      duck.quack(); // Виведе: Качка крякає
    
  

3.3 Робота з прототипами

1. Перевірка прототипу об'єкта

Метод Object.getPrototypeOf() дозволяє отримати прототип об'єкта.

Приклад:

JavaScript
    
      const parent = {
        greet() {
          console.log('Привіт від батька');
        }
      };

      const child = Object.create(parent);

      console.log(Object.getPrototypeOf(child) === parent); // Виведе: true
    
  

2. Перевірка належності об'єкта до прототипу

Оператор instanceof використовується для перевірки, чи є об'єкт екземпляром певного конструктора або прототипу.

Приклад:

JavaScript
    
      function Person(name) {
        this.name = name;
      }

      const john = new Person('Джон');

      console.log(john instanceof Person); // Виведе: true
    
  

3. Перебір властивостей об'єкта та його прототипу

Для перебору властивостей об'єкта та його прототипу можна використовувати цикл for...in, який перелічує всі перелічувані властивості.

Приклад:

JavaScript
    
      const parent = {
        greet() {
          console.log('Привіт від батька');
        }
      };

      const child = Object.create(parent);
      child.name = 'Дитина';

      for (let key in child) {
        console.log(key);
      }

      // Виведе:
      // name
      // greet
    
  

Для перебору тільки власних властивостей об'єкта використовується метод Object.keys() або цикл for...of із методом Object.entries().

Приклад:

JavaScript
    
      const parent = {
        greet() {
          console.log('Привіт від батька');
        }
      };

      const child = Object.create(parent);
      child.name = 'Дитина';

      console.log(Object.keys(child)); // Виведе: ['name']

      for (const [key, value] of Object.entries(child)) {
        console.log(key, value);
      }

      // Виведе:
      // name Дитина
    
  
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ