CodeGym /Kursy /Frontend SELF PL /Wprowadzenie do prototypów

Wprowadzenie do prototypów

Frontend SELF PL
Poziom 39 , Lekcja 2
Dostępny

3.1 Koncepcja prototypów

Prototypy są jedną z kluczowych koncepcji w JavaScript, pozwalając obiektom dziedziczyć właściwości i metody od innych obiektów. W odróżnieniu od wielu innych języków programowania, gdzie dziedziczenie realizowane jest przez klasy, w JavaScript dziedziczenie opiera się na prototypach. Teraz przyjrzymy się, czym są prototypy, jak działają i jak ich można używać.

Prototyp w JavaScript to obiekt, od którego inne obiekty mogą dziedziczyć właściwości i metody. Każdy obiekt w JavaScript ma ukryte odniesienie do innego obiektu – ukrytą właściwość [[Prototype]], która wskazuje na jego prototyp.

Ten prototyp może mieć swoje własne prototypy, tworząc łańcuch prototypów (prototype chain). Właściwości i metody obiektu mogą być dziedziczone przez ten łańcuch. To pozwala obiektom dzielić się funkcjonalnością i tworzyć hierarchie obiektów.

Właściwość proto

W JavaScript każdy obiekt ma właściwość __proto__, która wskazuje na jego prototyp. Ta właściwość jest używana do wyszukiwania właściwości i metod, jeśli nie zostaną znalezione w samym obiekcie.

W tym przykładzie obiekt child dziedziczy metodę greet() od obiektu parent:

JavaScript
    
      const parent = {
        greet() {
          console.log('Hello from parent');
        }
      };

      const child = {
        __proto__: parent
      };

      child.greet(); // Wyświetli: Hello from parent
    
  

3.2 Tworzenie i używanie prototypów

1. Object.create()

Metoda Object.create() pozwala utworzyć nowy obiekt z określonym prototypem.

Przykład:

JavaScript
    
      const parent = {
        greet() {
          console.log('Hello from parent');
        }
      };

      const child = Object.create(parent);
      child.greet(); // Wyświetli: Hello from parent
    
  

2. Dodawanie właściwości i metod do prototypu

Właściwości i metody mogą być dodawane do prototypu, aby były dostępne dla wszystkich obiektów, które go dziedziczą.

W tym przykładzie metoda speak() jest dodawana do prototypu animal i jest dostępna dla obiektu dog:

JavaScript
    
      const animal = {
        speak() {
          console.log(`${this.name} makes a noise.`);
        }
      };

      const dog = Object.create(animal);
      dog.name = 'Buddy';
      dog.speak(); // Wyświetli: Buddy makes a noise.
    
  

3. Zmiana prototypu obiektu

Prototyp obiektu można zmienić za pomocą metody Object.setPrototypeOf().

W tym przykładzie prototyp obiektu duck jest zmieniany z animal na bird:

JavaScript
    
      const animal = {
        speak() {
          console.log('Animal speaks');
        }
      };

      const bird = {
        fly() {
          console.log('Bird flies');
        }
      };

      const duck = {
        __proto__: animal,
        quack() {
          console.log('Duck quacks');
        }
      };

      Object.setPrototypeOf(duck, bird);
      duck.fly();   // Wyświetli: Bird flies
      duck.quack(); // Wyświetli: Duck quacks
    
  

3.3 Praca z prototypami

1. Sprawdzanie prototypu obiektu

Metoda Object.getPrototypeOf() pozwala uzyskać prototyp obiektu.

Przykład:

JavaScript
    
      const parent = {
        greet() {
          console.log('Hello from parent');
        }
      };

      const child = Object.create(parent);

      console.log(Object.getPrototypeOf(child) === parent); // Wyświetli: true
    
  

2. Sprawdzanie przynależności obiektu do prototypu

Operator instanceof jest używany do sprawdzania, czy obiekt jest instancją określonego konstruktora lub prototypu.

Przykład:

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

      const john = new Person('John');

      console.log(john instanceof Person); // Wyświetli: true
    
  

3. Iteracja po właściwościach obiektu i jego prototypu

Do iteracji po właściwościach obiektu i jego prototypu można użyć pętli for...in, która wymienia wszystkie enumerowalne właściwości.

Przykład:

JavaScript
    
      const parent = {
        greet() {
          console.log('Hello from parent');
        }
      };

      const child = Object.create(parent);
      child.name = 'Child';

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

      // Wyświetli:
      // name
      // greet
    
  

Do iteracji tylko po własnych właściwościach obiektu używa się metody Object.keys() lub pętli for...of z metodą Object.entries().

Przykład:

JavaScript
    
      const parent = {
        greet() {
          console.log('Hello from parent');
        }
      };

      const child = Object.create(parent);
      child.name = 'Child';

      console.log(Object.keys(child)); // Wyświetli: ['name']

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

      // Wyświetli:
      // name Child
    
  
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION