• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Niewiedza, jak to jest z klasami, a prototypami

Object Storage Arubacloud
+1 głos
130 wizyt
pytanie zadane 16 grudnia 2019 w JavaScript przez exiro44 Początkujący (370 p.)
zmienione kategorie 16 grudnia 2019 przez Comandeer

Hej,

z jednego kursu na temat obiektów i prototypów mamy podany kod: 

function Helicopter(name) {
    this.name = name;
    this.ammo = 2000;
    this.rockets = 16;
    this.attack = function() {
        this.ammo -= 100;
        this.rocket -= 2;

        console.log(`
            Helikopter: ${this.name} atakuje
            Pozostało amunicji: ${this.ammo}
            Pozostało rakiet: ${this.rockets}
        `);
    }
}

const army = [];
for (let i=0; i<=1000000; i++) {
    const heli = new Helicopter("Apache" + i);
    army.push(heli);
}

,,Jeżeli teraz stworzymy na takiej bazie 1000000 obiektów, to będziemy mieli 1000000 różnych właściwości name, 1000000 różnych właściwości ammo, rockets i uwaga - tyle samo duplikatów metody attack, która przecież za każdym razem będzie taka sama (jej kod się nie zmienia, zmienia się tylko obiekt na który wskazuje this)."

Aby oszczędzić zasoby, najlepiej metodę attack dodać jako prototyp, bo wtedy jest tylko w jednym miejscu w pamięci. A jak to się ma do ES6? Tworząc klasę o podobnej metodzie tworzy się tak samo dla każdego obiektu metoda, czy jest jak w oparciu o prototypy?

Pozdrawiam 

1 odpowiedź

+1 głos
odpowiedź 16 grudnia 2019 przez Comandeer Guru (601,890 p.)
wybrane 17 grudnia 2019 przez exiro44
 
Najlepsza

Klasy są w dużej mierze cukrem składniowym dla prototypów, na co wskazuje choćby fakt, że klasa jest tak naprawdę funkcją:

class MyClass {
	method() {}
}

typeof MyClass; // function

const instance = new MyClass();

instance.method === MyClass.prototype.method; // true

 

komentarz 16 grudnia 2019 przez exiro44 Początkujący (370 p.)
W takim razie jeśli jest klasa z taką metodą i tworzymy n obiektów, to metoda się powieli n razy. Czy można w takim razie tę metodę dać poza klasę i dodać jako prototyp? Czy to rozwiązanie ma sens i zadziała tak samo jak bez używania klas?
komentarz 16 grudnia 2019 przez Comandeer Guru (601,890 p.)
Ale przecież zarówno w odpowiedzi, jak i w przykładowym kodzie, pokazuję, że klasa jest jednoznaczna z prototypem.
komentarz 17 grudnia 2019 przez exiro44 Początkujący (370 p.)
A tak, przepraszam, teraz zrozumiałem :D dziękuję za pomoc :)

Podobne pytania

92,596 zapytań

141,446 odpowiedzi

319,719 komentarzy

61,980 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...