Курси програмування для дітей безкоштовно

22. Класи у Javascript

Класи у Javascript | JavaScript для дітей | ITisFuture

На цьому уроці ми навчимося створювати класи у Javascript та зробимо свої перші кроки у таємничий світ ООП. Відкрийте для себе новий рівень програмування! Ми створимо картки з героями Гаррі Поттера і розберемося у тому, як класи допомагають структурувати великий об’єм інформації.

Картки герої Гаррі Поттера | Класи у Javascript | JavaScript для дітей | ITisFuture

💡 Що таке класи у JavaScript?

Класи в JavaScript — це спосіб створювати шаблони об’єктів із подібними властивостями та методами. Вони допомагають легко створювати багато об’єктів з однаковою структурою.

Уяви, що клас — це як креслення для будинку. За цим кресленням можна збудувати багато однакових будинків, але кожен може мати свої особливості (наприклад, колір стін або форму даху).

🛠️ Як використовуються класи?

Класи використовуються, коли потрібно створити багато об’єктів з однаковими властивостями та методами. Наприклад:

  1. Герої в грі: Кожен герой має ім’я, здоров’я та атаку.
  2. Студенти в школі: Кожен має ім’я, клас і оцінки.
  3. Машини: Кожна машина має марку, модель і колір.

🏗️ Як створити клас у JavaScript?

class Person {
    constructor(name, age) {
        this.name = name;  // Атрибут (властивість)
        this.age = age;    // Атрибут (властивість)
    }

    // Метод
    sayHello() {
        console.log(`Привіт! Я ${this.name}, мені ${this.age} років.`);
    }
}

// Створення об'єкта (екземпляра класу)
const milana= new Person("Мілана", 16);
milana.sayHello();  // Виведе: Привіт! Я Мілана, мені 16 років.

📝 Розберемо по частинах:

1. Ключове слово class: це команда “Створити новий шаблон об’єктів”.

2. Конструктор (constructor()): це спеціальний метод, який викликається при створенні нового об’єкта.

  • Він приймає параметри (наприклад, ім’я та вік).
  • Задає значення атрибутів (властивостей).
  • Використовується слово this, щоб показати, що атрибути належать саме цьому об’єкту.

3. Атрибути (властивості): це характеристики об’єкта, що описують його стан.

У прикладі це name та age.

4. Методи: це функції всередині класу, які описують поведінку об’єкта.

У прикладі метод sayHello() виводить привітання.

🔄 Як створити об’єкт на основі класу?

const milana= new Person("Мілана", 16);

Це означає:

  1. Створити новий об’єкт anna, використовуючи клас Person.
  2. Викликати конструктор і передати в нього ім’я та вік.
  3. Зберегти ці значення у відповідні атрибути.

Схожим чином ми можемо створити інший об’єкт:

const maria = new Person("Марія", 17);

🌟 Для чого використовуються класи?

  1. Масштабованість: Легко створювати багато об’єктів з однаковою структурою.
  2. Зручність: Методи всередині класу допомагають групувати поведінку об’єкта.
  3. Чистота коду: Замість написання однакових функцій для кожного об’єкта, ми створюємо один клас і використовуємо його.
Класи у Javascript | JavaScript для дітей | ITisFuture

Питання на мільйон!

  1. Уявіть, що ви програмуєте інтернет-магазин електроніки. Який клас створимо? Які можуть бути об’єкти у класі ? Які у них можуть бути атрибути?
  2. А тепер пишемо комп’ютерну гру (наприклад, про покемонів). Як назвемо клас ? Які об’єкти будуть у класі? Які можуть бути атрибути?

Практика. Створюємо класи у JavaScript

Спробуймо класи на практиці на прикладі героїв Гаррі Поттеру. Для початку, створимо клас у консолі, розберемо його на частинки та пограємося з ним. Далі додамо логіку, яка б презентувала наш клас на html сторінці.

Наш перший клас на JavaScript у консолі

1: Створіть новий проєкт у Javascript. Додайте наступний код у файл html. Також створіть файл для скриптів, який підключений у html


  
    <script src="script.js"></script>
..
    <div id="characters"></div>

2: window.onload – це функція, яка загружається при завантаженні сторінки. В середині неї ми і створимо наші класі та увесь інший код. Створіть клас Character з атрибутами name (ім’я) та house (факультет). Та метод introduce(), який допоможе герою привітатися.

window.onload = function () {
  class Character {
    constructor(name, house) {
      this.name = name;
      this.house = house;
    }


    introduce() {
      console.log(`Привіт! Я ${this.name} з факультету ${this.house}!`);
    }

};

3: В середині window.onload, але вже після класу створіть об’єкт harry. Викличте метод introduce() для harry. Відкрийте консоль браузера, щоб переконатись, що код працює.

  const harry = new Character("Harry Potter", "Gryffindor");
  // Виклик методів
  harry.introduce();

4: Додайте ще два атрибути image та houselogo.

5: Додайте метод getHouseMotto() для девізу факультету. Замініть сердечка на відповідні факультети та девізи:

Девіз Gryffindor Сміливість, відвага, рішучість!
Девіз Slytherin це Хитрість, амбіційність, сила!
Девіз Ravenclaw це Мудрість, творчість, інтелект!
Девіз Hufflepuff це Вірність, працьовитість, справедливість!

    getHouseMotto() {
      const houseMottos = {
        Gryffindor: "❤️ Сміливість, відвага, рішучість!",
        💚: 💚,
        💙: 💙,
        💛: 💛,
      };
      return houseMottos[this.house] || "Невідомий факультет";
    }

houseMottos – це словник з девізів. Де ключ – назва факультету, а значення – девіз.
return houseMottos[this.house] || “Невідомий факультет”; каже, що ми повернемо значення девізу для факультету this.house, якщо знайдемо такий у списку. І повернемо “Невідомий факультет”, якщо факультет зададуть інший.

6: Схожим чином створіть метод getHouseLogo для класу. Він має повертати посилання на картинку для факультету. (Наприклад https://logos-world.net/wp-content/uploads/2021/08/Gryffindor-Symbol.png). Команда return має повертати картинку, якщо факультет знайдено і пустий рядок, якщо ні.

Змініть конструктор класу для атрибута houselogo, викликавши цей метод:

this.houselogo = this.getHouseLogo();

7: Додайте метод showCharacterInfo(), який виводить інформацію про героя. Додайте у метод інфо про факультет, лого факультету та девіз.

      console.log("=== Інформація про героя ===");
      console.log(`Ім'я: ${this.name}`);

8: В кінці коду, де ми створили об’єкт harry, викличте для harry метод showCharacterInfo().

9: Створіть новий об’єкт і зробіть з ним те ж, що ми проробили для harry.

Відображаємо клас візуально

Настав час попрацювати над візуалкою!

10: Додайте стилів для майбутніх карток з героями. Замініть сердечка на відповідні властивості (підказка: text-align, margin, width, padding, height, border, box-shadow).
Після додавання стилів нічого не має змінитися на екрані, ми ще не дописали код!

/* Стиль для картки */
.card {
  display: inline-block;
  💙: 10px; /* Зовнішній відступ*/
  text-align: center; /* Вирівнювання тексту */
  💛: 2px solid #333; /* Рамка для зображення */
  border-radius: 8px; 
  💚: 10px; /* Внутрішній відступ в середині картки */
  ❤️: 220px; /* ширина картки*/
  💙: 320px; /* висота картки*/
  box-shadow: 3px 3px 6px rgba(0, 0, 0, 0.2); /* Тінь картки для ефекту об'єму */
}

/* Стиль для зображення в картці */
img {
  💛: 200px; /* ширина зображення */
  ❤️: 260px; /* висота зображення */
  object-fit: cover;
  border-radius: 8px; 
}

/* Стиль для заголовків та абзаців у картці */
h3,
p {
  💚: 5px 0;  /* Зовнішній відступ*/
}

11: Для початку переробимо наші об’єкти. Замість окремих об’єктів створімо список з об’єктів. Методи для об’єктів можна поки закоментувати або видалити.
Замініть другий елемент на дані реального героя. Додайте ще об’єктів у список з різних факультетів (всього 6 шт).

Якщо ви вже додали нові атрибути у наш клас, то створення об’єкта може відрізнятися!

  const characters = [
    new Character("Harry Potter", "Gryffindor", "https://images.mattel.net/image/upload/w_360,f_auto,c_scale/shop-contentstack/blt1c0f838945e594a6/627599ab4d9f892971292b4f/Shopper_HarryPotter_PLP_1-Header_360x400_M-2.jpg"),
    new Character("💙", "💙", "💙"),
  ];

12: Після створення об’єктів, почнемо створювати картки. Для початку дістанемо той одинокий елемент з id=”characters”, що є у нас у html-коді. І для кожного об’єкту з characters (зауважте цикл, що запускається по об’єкту) будемо створювати елементи html, але вже в наступних пунктах. Далі увесь наступний код пишемо в середині characters.forEach, бо це елементи для container

  const container = document.getElementById("characters");

  characters.forEach((character) => { 
    // тут створюємо елементи
  });

13: Додайте наступний код. Він створює елемент div з класом card. Зауважте, що ми прописуємо значення атрибута className для card

   const card = document.createElement("div");
    card.className = "card";

Аналогічно у змінну img запишіть створення нового елементу img.
Атрибут src для img має дорівнювати character.image (посилання на картинку).
Атрибут alt для img має дорівнювати character.name(ім’я героя).

Додайте картинку і картку до елементів, які виводяться на екран.

    card.appendChild(img);
    container.appendChild(card);

14: Тепер пропишемо поведінку при наведенні мишки перед командами appendChild. Має показуватися картинка з героєм (атрибут image об’єкту character), а якщо наводимо мишу на картинку, то показується картинка факультету (атрибут houselogo об’єкту character). Допишіть код, замінивши сердечка

    // Додаємо події наведення мишки
    img.addEventListener("mouseenter", () => {
      img.src = 💙.💙;
    });

    img.addEventListener("mouseleave", () => {
      img.src = 💛.💛;
    });

15: Під картинкою, але перед командами appendChild, допишемо ім’я героя і факультет. Зробіть по аналогії з завданням 13.

У змінну name запишіть створення нового елементу h3.
Атрибут textContent для h3 має дорівнювати character.name (ім’я героя).

У змінну house запишіть створення нового елементу p.
Атрибут textContent для p має дорівнювати House: ${character.house}.

16: Додайте блоки appendChild для name та house туди ж, куди прописували appendChild для img

   card.appendChild(name);
   card.appendChild(house);

Ось такі картки у вас мають вийти в результаті:

Картки герої Гаррі Поттера | Класи у Javascript | JavaScript для дітей | ITisFuture
Уроки програмування для дітей. Домашня робота

Домашня робота

1: Зробіть завдання 1-10 (так, і 10-те також!) з класної роботи.

2: Додайте до вашого класу нові атрибути змініть методи та об’єкти, які необхідно, щоб вони працювали з новими атрибутами.

isQuidditchPlayer (Може приймати два значення: true – якщо герой грає\грав в команді факультету і false – якщо ні. )
patronus – патронус (тотемна тваринка) героя

3: Зробіть так, щоб patronus відображався на картці.

4: Якщо isQuidditchPlayer дорівнює true, то поряд з іменем героя має відображатися смайлик (на ваш вибір), який символізує причетність до відповідної команди. Якщо isQuidditchPlayer дорівнює false – то нічого не відображаємо.

5: Змініть стилі картки на ваш смак

Уроки програмування для дітей ускладнені завдання level up

Level Up
Класи у Javascript

1: Додайте метод parseltongue у клас з героями ГП. Він має писати ім’я героя на мові parseltongue (смайли можете обрати на ваш смак):
всі літери “а” в імені замінюються на 🐍,
всі літери “о” в імені замінюються на 🦎,
всі літери “е” в імені замінюються на 🪱,
всі літери “і” в імені замінюються на 🕷,
всі літери “т” в імені замінюються на 🦗,
всі літери “р” в імені замінюються на 🦂.

Оновіть showCharacterInfo, щоб він виводив ім’я мовою parseltongue

2: Створіть клас і картки на власну тему за аналогією з класною роботою. Є кілька умов:

  • об’єкти мають мати атрибут, який відносить їх до групи (як факультети у класній роботі)
  • розфарбуйте фон картки залежно від того, до якої групи вона належить.

Хочете дізнатися більше ? Переходьте на сторінку з уроками по CSS та Javascript і прокачайте навички з веброзробки 😎🤖 !!!

Залишити коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

holiganbet   holiganbet   holiganbet   holiganbet   holiganbet   holiganbet   starzbet   starzbet   starzbet   starzbet   starzbet   zlot   zlot   zlot   meritking   betgaranti   meritking   meritking   starzbet   betsmove   betcio   egebet   phishing   child porn   hack   shell   bets10   pishing   meritking   meritking   meritking   meritking   meritking   meritking   meritking   childiren porn   hack   shell   child porn   meritking   starzbet   jojobet   jojobet   meritking   starzbet   starzbet   mariobet   mariobet   mariobet   meritking   meritking   meritking   grandpashabet   meritking   meritkin   meritking   grandpashabet   meritking   grandpashabet   grandpashabet   grandpashabet   grandpashabet   grandpashabet   grandpashabet   grandpashabet   grandpashabet   grandpashabet   grandpashabet   grandpashabet   grandpashabet   grandpashabet   grandpashabet   grandpashabet