Τι είναι τα πρωτότυπα στη 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) και βρίσκει τη μέθοδο εκεί.
Τα πρωτότυπα επιτρέπουν την αποδοτική χρήση μνήμης, καθώς οι μέθοδοι και κοινές ιδιότητες αποθηκεύονται στο πρωτότυπο, και όχι διπλότυπα σε κάθε αντικείμενο.