Sobes.tech
Middle

Τι είναι τα πρωτότυπα στη JavaScript;

sobes.tech AI

Απάντηση από AI

Στη JavaScript, τα αντικείμενα μπορούν να κληρονομήσουν ιδιότητες και μεθόδους από άλλα αντικείμενα μέσω του μηχανισμού των πρωτύπων. Κάθε αντικείμενο στη JavaScript έχει μια εσωτερική κρυφή ιδιότητα [[Prototype]], που δείχνει σε ένα άλλο αντικείμενο, το πρωτότυπό του. Όταν γίνεται πρόσβαση σε μια ιδιότητα ή μέθοδο ενός αντικειμένου, ο μηχανισμός της JavaScript την αναζητά πρώτα στο ίδιο το αντικείμενο. Αν δεν την βρει, ελέγχει την ιδιότητα [[Prototype]] και αναζητά στο πρωτότυπο. Αυτή η διαδικασία επαναλαμβάνεται κατά μήκος της αλυσίδας των πρωτύπων μέχρι να βρεθεί η ιδιότητα ή να φτάσει στο null (τέλος της αλυσίδας).

Βασικές έννοιες:

  • Αλυσίδα πρωτύπων: Διαδοχή αντικειμένων που συνδέονται μέσω της ιδιότητας [[Prototype]].
  • Κληρονομικότητα: Τα αντικείμενα κληρονομούν ιδιότητες και μεθόδους από τα πρωτότυπά τους.
  • __proto__: Ιστορικά χρησιμοποιούμενη (αν και όχι τυποποιημένη αρχικά) ιδιότητα για πρόσβαση στο [[Prototype]]. Σήμερα, προτιμάται η χρήση της Object.getPrototypeOf().
  • prototype: Ιδιότητα του κατασκευαστή, στην οποία αναφέρεται το [[Prototype]] των αντικειμένων που δημιουργούνται με αυτόν τον κατασκευαστή.

Παράδειγμα με κατασκευαστή και πρωτότυπο:

// Κατασκευαστής
function Person(name, age) {
  this.name = name;
  this.age = age;
}

// Προσθήκη μεθόδου στο πρωτότυπο
Person.prototype.sayHello = function() {
  console.log("Γειά σου, το όνομά μου είναι " + this.name);
};

// Δημιουργία στιγμιότυπου
const person1 = new Person("Alice", 30);

// Κλήση μεθόδου από το πρωτότυπο
person1.sayHello(); // Έξοδος: Γειά σου, το όνομά μου είναι Alice

// Πρόσβαση στο πρωτότυπο του στιγμιότυπου
console.log(Object.getPrototypeOf(person1) === Person.prototype); // Έξοδος: true

Σε αυτό το παράδειγμα:

  • Person είναι μια κατασκευαστική συνάρτηση.
  • Person.prototype είναι το αντικείμενο που λειτουργεί ως πρωτότυπο για όλα τα στιγμιότυπα που δημιουργούνται με new Person().
  • sayHello είναι μια μέθοδος που προστέθηκε στο πρωτότυπο. Όλα τα στιγμιότυπα του Person κληρονομούν αυτή τη μέθοδο.
  • Όταν καλείται person1.sayHello(), ο μηχανισμός της JavaScript αναζητά το sayHello στο person1. Αν δεν το βρει, κοιτάζει στο [[Prototype]] του person1 (που είναι ίσο με το Person.prototype) και βρίσκει τη μέθοδο εκεί.

Τα πρωτότυπα επιτρέπουν την αποδοτική χρήση μνήμης, καθώς οι μέθοδοι και κοινές ιδιότητες αποθηκεύονται στο πρωτότυπο, και όχι διπλότυπα σε κάθε αντικείμενο.