Σε αυτό το σεμινάριο, θα μάθετε για πρωτότυπα σε JavaScript με τη βοήθεια παραδειγμάτων.
Πριν μάθετε τα πρωτότυπα, φροντίστε να ελέγξετε αυτά τα μαθήματα:
- Αντικείμενα JavaScript
- Λειτουργία κατασκευαστή JavaScript
Όπως γνωρίζετε, μπορείτε να δημιουργήσετε ένα αντικείμενο σε JavaScript χρησιμοποιώντας μια συνάρτηση κατασκευαστή αντικειμένων. Για παράδειγμα,
// constructor function function Person () ( this.name = 'John', this.age = 23 ) // creating objects const person1 = new Person(); const person2 = new Person();
Στο παραπάνω παράδειγμα, function Person()
είναι μια συνάρτηση κατασκευαστή αντικειμένων. Έχουμε δημιουργήσει δύο αντικείμενα person1
και person2
από αυτό.
Πρωτότυπο JavaScript
Σε JavaScript, κάθε λειτουργία και αντικείμενο έχει μια ιδιότητα που ονομάζεται πρωτότυπο από προεπιλογή. Για παράδειγμα,
function Person () ( this.name = 'John', this.age = 23 ) const person = new Person(); // checking the prototype value console.log(Person.prototype); // (… )
Στο παραπάνω παράδειγμα, προσπαθούμε να αποκτήσουμε πρόσβαση στην πρωτότυπη ιδιότητα μιας Person
συνάρτησης κατασκευαστή.
Δεδομένου ότι το πρωτότυπο ιδιοκτησία δεν έχει καμία τιμή αυτήν τη στιγμή, δείχνει ένα κενό αντικείμενο (…).
Πρωτότυπο Κληρονομικότητα
Στο JavaScript, ένα πρωτότυπο μπορεί να χρησιμοποιηθεί για την προσθήκη ιδιοτήτων και μεθόδων σε μια συνάρτηση κατασκευαστή. Και τα αντικείμενα κληρονομούν ιδιότητες και μεθόδους από ένα πρωτότυπο. Για παράδειγμα,
// constructor function function Person () ( this.name = 'John', this.age = 23 ) // creating objects const person1 = new Person(); const person2 = new Person(); // adding property to constructor function Person.prototype.gender = 'male'; // prototype value of Person console.log(Person.prototype); // inheriting the property from prototype console.log(person1.gender); console.log(person2.gender);
Παραγωγή
(φύλο: "αρσενικό") αρσενικό αρσενικό
Στο παραπάνω πρόγραμμα, έχουμε προσθέσει μια νέα ιδιότητα gender
στη Person
συνάρτηση κατασκευαστή χρησιμοποιώντας:
Person.prototype.gender = 'male';
Στη συνέχεια, αντικείμενο person1
και person2
κληρονομεί την ιδιότητα gender
από την πρωτότυπη ιδιότητα της Person
συνάρτησης κατασκευαστή.
Ως εκ τούτου, και τα δύο αντικείμενα person1
και person2
μπορούν να έχουν πρόσβαση στην ιδιότητα φύλου.
Σημείωση: Η σύνταξη για την προσθήκη της ιδιότητας σε μια συνάρτηση κατασκευαστή αντικειμένων είναι:
objectConstructorName.prototype.key = 'value';
Το πρωτότυπο χρησιμοποιείται για την παροχή πρόσθετης ιδιότητας σε όλα τα αντικείμενα που δημιουργούνται από μια συνάρτηση κατασκευαστή.
Προσθέστε μεθόδους σε μια συνάρτηση κατασκευαστή χρησιμοποιώντας πρωτότυπο
Μπορείτε επίσης να προσθέσετε νέες μεθόδους σε μια συνάρτηση κατασκευαστή χρησιμοποιώντας πρωτότυπο. Για παράδειγμα,
// constructor function function Person () ( this.name = 'John', this.age = 23 ) // creating objects const person1 = new Person(); const person2 = new Person(); // adding a method to the constructor function Person.prototype.greet = function() ( console.log('hello' + ' ' + this.name); ) person1.greet(); // hello John person2.greet(); // hello John
Στο παραπάνω πρόγραμμα, μια νέα μέθοδος greet
προστίθεται στη Person
συνάρτηση κατασκευαστή χρησιμοποιώντας ένα πρωτότυπο.
Αλλαγή πρωτοτύπου
Εάν αλλάξει μια πρωτότυπη τιμή, τότε όλα τα νέα αντικείμενα θα έχουν την αλλαγή ιδιότητας. Όλα τα αντικείμενα που δημιουργήθηκαν προηγουμένως θα έχουν την προηγούμενη τιμή. Για παράδειγμα,
// constructor function function Person() ( this.name = 'John' ) // add a property Person.prototype.age = 20; // creating an object const person1 = new Person(); console.log(person1.age); // 20 // changing the property value of prototype Person.prototype = ( age: 50 ) // creating new object const person3 = new Person(); console.log(person3.age); // 50 console.log(person1.age); // 20
Σημείωση : Δεν πρέπει να τροποποιήσετε τα πρωτότυπα τυπικών ενσωματωμένων αντικειμένων JavaScript όπως χορδές, πίνακες κ.λπ. Θεωρείται κακή πρακτική.
Καθοδήγηση πρωτοτύπου JavaScript
Εάν ένα αντικείμενο προσπαθεί να αποκτήσει πρόσβαση στην ίδια ιδιότητα που βρίσκεται στη συνάρτηση κατασκευαστή και στο πρωτότυπο αντικείμενο, το αντικείμενο αφαιρεί την ιδιότητα από τη συνάρτηση κατασκευαστή. Για παράδειγμα,
function Person() ( this.name = 'John' ) // adding property Person.prototype.name = 'Peter'; Person.prototype.age = 23 const person1 = new Person(); console.log(person1.name); // John console.log(person1.age); // 23
Στο παραπάνω πρόγραμμα, ένα όνομα ιδιότητας δηλώνεται στη συνάρτηση κατασκευαστή και επίσης στην πρωτότυπη ιδιότητα της συνάρτησης κατασκευαστή.
Όταν το πρόγραμμα εκτελείται, person1.name
κοιτάζει στη συνάρτηση του κατασκευαστή για να δει αν υπάρχει μια ιδιότητα name
. Δεδομένου ότι η συνάρτηση κατασκευαστή έχει την ιδιότητα ονόματος με τιμή 'John'
, το αντικείμενο παίρνει αξία από αυτήν την ιδιότητα.
Όταν το πρόγραμμα εκτελείται, person1.age
κοιτάζει στη συνάρτηση του κατασκευαστή για να δει αν υπάρχει μια ιδιότητα age
. Δεδομένου ότι η συνάρτηση κατασκευαστή δεν έχει age
ιδιότητα, το πρόγραμμα εξετάζει το πρωτότυπο αντικείμενο της συνάρτησης κατασκευαστή και το αντικείμενο κληρονομεί την ιδιότητα από το πρωτότυπο αντικείμενο (εάν υπάρχει).
Σημείωση : Μπορείτε επίσης να αποκτήσετε πρόσβαση στην πρωτότυπη ιδιότητα μιας συνάρτησης κατασκευαστή από ένα αντικείμενο.
function Person () ( this.name = 'John' ) // adding a prototype Person.prototype.age = 24; // creating object const person = new Person(); // accessing prototype property console.log(person.__proto__); // ( age: 24 )
Στο παραπάνω παράδειγμα, ένα person
αντικείμενο χρησιμοποιείται για πρόσβαση στην ιδιότητα του πρωτοτύπου χρησιμοποιώντας __proto__
. Ωστόσο, __proto__
έχει καταργηθεί και θα πρέπει να αποφύγετε τη χρήση του.