Αντικειμενοστραφής JavaScript (OOJS) 3 τρόποι δημιουργίας περιπτώσεων αντικειμένων
Όταν είναι μια γλώσσα προγραμματισμού όλα σχετικά με τα αντικείμενα, το πρώτο πράγμα που πρέπει να μάθουμε είναι πώς να δημιουργήσετε αντικείμενα. Η δημιουργία αντικειμένων στο JavaScript είναι αρκετά εύκολη: ένα ζευγάρι σγουράκια θα κάνει τη δουλειά, όμως, αυτό είναι ούτε ο μόνος τρόπος για να δημιουργήσετε ένα αντικείμενο ούτε ο μόνος τρόπος θα χρειαστεί ποτέ να χρησιμοποιήσετε.
Στο JavaScript, οι περιπτώσεις αντικειμένων είναι δημιουργήθηκε από ενσωματωμένα αντικείμενα και εμφανίζονται όταν το πρόγραμμα εκτελείται. Για παράδειγμα, Ημερομηνία
είναι ένα ενσωματωμένο αντικείμενο που μας δίνει πληροφορίες για ημερομηνίες. Αν θέλουμε να δείξουμε την τρέχουσα ημερομηνία σε μια σελίδα, εμείς χρειάζονται μια περίοδο εκτέλεσης του Ημερομηνία
που φέρει τις πληροφορίες σχετικά με την τρέχουσα ημερομηνία.
Η JavaScript μας επιτρέπει επίσης να καθορίστε τα δικά μας αντικείμενα που μπορούν να παράγουν τα δικά τους αντικείμενα στο χρόνο εκτέλεσης. Στη JavaScript, όλα είναι ένα αντικείμενο και κάθε αντικείμενο έχει ένα τελικός πρόγονος που ονομάζεται Αντικείμενο
. Δημιουργείται μια εμφάνιση αντικειμένου εκδοχή.
1. Το νέος
χειριστής
Μία από τις πιο συνηθισμένες και γνωστές μεθόδους για τη δημιουργία μιας νέας εμφάνισης αντικειμένου είναι από χρησιμοποιώντας το νέος
χειριστής.
Χρειάζεσαι ένα κατασκευαστής να κάνει το νέος
εργασίες χειριστή. Ένας κατασκευαστής είναι μια μέθοδος ενός αντικειμένου που συγκεντρώνει ένα νέα εμφάνιση αυτού του αντικειμένου. Η βασική σύνταξη του μοιάζει με αυτό:
νέος κατασκευαστής ()
Ένας κατασκευαστής μπορεί αποδεχθεί επιχειρήματα που μπορεί να χρησιμοποιηθεί για να αλλάξει ή να προσθέσει ιδιότητες στην εμφάνιση του αντικειμένου που κατασκευάζει. Ο κατασκευαστής έχει το ίδιο όνομα ως αντικείμενο που ανήκει.
Εδώ είναι ένα παράδειγμα πώς να δημιουργήσετε ένα παράδειγμα του Ημερομηνία()
αντικείμενο με το νέος
λέξη-κλειδί:
dt = new Ημερομηνία (2017, 0, 1) console.log (dt) // Κυρ Ιαν 01 2017 00:00:00 GMT + 0100
Ημερομηνία()
είναι ο κατασκευαστής για να δημιουργήσει ένα νέο Ημερομηνία
αντικείμενο. Διαφορετικοί κατασκευαστές για ένα αντικείμενο πάρτε διαφορετικά επιχειρήματα για να δημιουργήσετε το ίδιο είδος αντικειμένων αντικειμένων με ποικίλα χαρακτηριστικά.
Δεν είναι όλα τα ενσωματωμένα αντικείμενα στο JavaScript να μπορούν να παρουσιαστούν όπως Ημερομηνία
. Υπάρχουν αντικείμενα που δεν έρχονται με έναν κατασκευαστή: Μαθηματικά
, JSON
και Κατοπτρίζω
, αλλά είναι ακόμα συνηθισμένα αντικείμενα.
Μεταξύ των ενσωματωμένων αντικειμένων που διαθέτουν κατασκευαστή (-ες), Σύμβολο
δεν μπορεί να καλείται στο στυλ κατασκευαστή για να δημιουργήσετε ένα νέο Σύμβολο
παράδειγμα. Μπορεί μόνο να είναι που ονομάζεται ως συνάρτηση που επιστρέφει ένα νέο Σύμβολο
αξία.
Επίσης, μεταξύ των ενσωματωμένων αντικειμένων που έχουν κατασκευαστή (-ες), δεν χρειάζονται όλοι οι κατασκευαστές τους να καλούνται με το νέος
χειριστή για να δημιουργηθεί παράσταση. Λειτουργία
, Παράταξη
, Λάθος
, και RegExp
μπορεί επίσης να καλείται ως λειτουργίες, χωρίς να χρησιμοποιήσετε το νέος
λέξη-κλειδί και θα δημιουργήσουν στιγμιότυπα και θα επιστρέψουν μια νέα εμφάνιση αντικειμένου.
2. Το Κατοπτρίζω
αντικείμενο
Οι προγραμματιστές backend μπορεί να είναι ήδη εξοικειωμένοι API προβληματισμού. Ο προβληματισμός είναι ένα χαρακτηριστικό γνώρισμα των γλωσσών προγραμματισμού επιθεωρεί και ενημερώνει ορισμένες από τις βασικές οντότητες, όπως αντικείμενα και τάξεις, κατά το χρόνο εκτέλεσης.
Στο JavaScript, μπορείτε ήδη να εκτελέσετε μερικοί λειτουργίες αντανάκλασης που χρησιμοποιούν Αντικείμενο
. Αλλά, α κατάλληλο API Αντανάκλασης τελικά ήρθε να υπάρχει και στο JavaScript.
ο Κατοπτρίζω
αντικείμενο έχει ένα σύνολο μεθόδων για να να δημιουργήσετε και να ενημερώσετε στιγμιότυπα αντικειμένων. ο Κατοπτρίζω
αντικείμενο δεν έχει κατασκευαστή, οπότε δεν μπορεί να δημιουργηθεί παράσταση με το νέος
φορέα εκμετάλλευσης και, ακριβώς όπως Μαθηματικά
και JSON
, το δεν μπορεί να καλείται ως λειτουργία είτε.
Ωστόσο, Κατοπτρίζω
έχει ένα ισοδύναμο του νέος
χειριστής: ο Reflect.construct ()
μέθοδος.
Reflect.construct (στόχος, argumentList [, newTarget])
Και τα δύο στόχος
και το προαιρετικό newTarget
τα επιχειρήματα είναι αντικείμενα που έχουν τους δικούς τους κατασκευαστές, ενώ argumentsList
είναι ένα λίστα επιχειρημάτων να μεταβιβαστεί στον κατασκευαστή του στόχος
.
var dt = Reflect.construct (Ημερομηνία, [2017, 0, 1]). console.log (dt); // Κυρ Ιαν 01 2017 00:00:00 GMT + 0100
Ο παραπάνω κώδικας έχει το ίδιο αποτέλεσμα ως προετοιμασία Ημερομηνία()
χρησιμοποιώντας το νέος
χειριστής. Αν και μπορείτε ακόμα να χρησιμοποιήσετε νέος
, Ο προβληματισμός είναι ένα Πρότυπο ECMAScript 6. Σας επιτρέπει επίσης να κάνουν χρήση του newTarget
διαφωνία, που είναι ένα άλλο πλεονέκτημα έναντι του νέος
χειριστής.
Η αξία του newTarget
's πρωτότυπο (για να είμαι ακριβής, είναι το πρωτότυπο του newTarget
του κατασκευαστή) γίνεται το πρωτότυπο του νεοσυσταθέντος στιγμιότυπου.
Ένα πρωτότυπο είναι το ιδιότητα ενός Αντικειμένου, η αξία του οποίου είναι επίσης ένα αντικείμενο, που φέρει τις ιδιότητες του αρχικού αντικειμένου. Με λίγα λόγια, ένα αντικείμενο παίρνει τα μέλη του από το πρωτότυπο του.
Εδώ, ας δούμε ένα παράδειγμα:
class constructor () this.message = function () console.log ('μήνυμα από A') δεδομένα () console.log ('δεδομένα από B') obj = Reflect.construct (A, [], B) console.log (obj.message ()); // μήνυμα από το console.log (obj.data ()); // δεδομένα από το B console.log (obj instanceof B) // true
Περνώντας σι
ως το τρίτο επιχείρημα για Reflect.construct ()
, η πρωτότυπη τιμή του obj
αντικείμενο είναι να γίνει το ίδιο ως το πρωτότυπο του σι
's κατασκευαστής (που έχει τις ιδιότητες μήνυμα
και δεδομένα
).
Ετσι, obj
μπορεί να έχει πρόσβαση στο μήνυμα
και δεδομένα
, διαθέσιμο στο πρωτότυπο του. Από τότε obj
γίνεται χρησιμοποιώντας ΕΝΑ
, έχει επίσης τη δική του μήνυμα
το έλαβε από ΕΝΑ
.
Αν και obj
κατασκευάζεται ως διάταξη, είναι όχι μια περίπτωση Παράταξη
, επειδή το πρωτότυπο του έχει ρυθμιστεί Αντικείμενο
.
obj = Reflect.construct (Array, [1,2,3], αντικείμενο) console.log (obj) // Array [1, 2, 3] console.log (obj instanceof Array)
Reflect.construct ()
μπορεί να είναι χρήσιμη όταν θέλετε να δημιουργήσετε ένα αντικείμενο χρησιμοποιώντας περισσότερα από ένα σχέδια.
3. Το Object.create ()
μέθοδος
Μπορείτε επίσης να δημιουργήσετε ένα νέο συνηθισμένο αντικείμενο με συγκεκριμένο πρωτότυπο μέσω Object.create ()
. Και αυτό μπορεί να μοιάζει πολύ με τη χρήση του νέος
αλλά δεν είναι.
Object.create (O [, propertiesObject])
ο Ο
το επιχείρημα είναι ένα αντικείμενο που εξυπηρετεί το πρωτότυπο για το νέο αντικείμενο που θα δημιουργηθεί. Το προαιρετικό propertiesObject
το επιχείρημα είναι α λίστα ιδιοτήτων ίσως θέλετε να προσθέσετε στο νέο αντικείμενο.
() ()) δεδομένα από το obj obj1 = Object.create (obj) () () ()), foo: writable: true, configurable: true, value: function () return 'foo από obj1') console.log (obj1.message ()) // message from A κονσόλα. log (obj1.foo ()) // foo από το obj1
Στο obj
αντικείμενο, η προστιθέμενη ιδιότητα είναι δεδομένα
, καθώς obj1
, του foo
. Έτσι, όπως βλέπετε, μπορούμε να έχουμε ιδιότητες και μεθόδους που προστίθενται σε ένα νέο αντικείμενο.
Αυτό είναι μεγάλο όταν θέλετε να δημιουργήσετε πολλαπλά αντικείμενα του ίδιου είδους αλλά με διαφορετικές συμπληρωματικές ιδιότητες ή μέθοδοι. ο Object.create ()
η σύνταξη αποθηκεύει το πρόβλημα της κωδικοποίησης όλων αυτών ξεχωριστά.