Ένα αντικείμενο διακομιστή μεσολάβησης JavaScript σάς επιτρέπει να παρακολουθείτε και να προσαρμόζετε τη συμπεριφορά ενός άλλου αντικειμένου, χωρίς να τροποποιήσετε το πρωτότυπο.
Χρησιμοποιώντας αντικείμενα διακομιστή μεσολάβησης, μπορείτε να επικυρώσετε δεδομένα, να παρέχετε επιπλέον λειτουργίες και να ελέγξετε την πρόσβαση σε ιδιότητες και λειτουργίες.
Μάθετε τα πάντα για τις χρήσεις των αντικειμένων διακομιστή μεσολάβησης και πώς μπορείτε να τα δημιουργήσετε σε JavaScript.
Δημιουργία αντικειμένου διακομιστή μεσολάβησης
Στο JavaScript, μπορείτε να δημιουργήσετε αντικείμενα διακομιστή μεσολάβησης χρησιμοποιώντας το Πληρεξούσιοκατασκευαστής. Αυτός ο κατασκευαστής παίρνει δύο ορίσματα: α στόχος αντιταχθείτε να τυλίξετε τον διακομιστή μεσολάβησης και α χειριστής αντικείμενο του οποίου οι ιδιότητες καθορίζουν τη συμπεριφορά του διακομιστή μεσολάβησης όταν εκτελείτε λειτουργίες.
Λαμβάνει αυτά τα ορίσματα και δημιουργεί ένα αντικείμενο που μπορείτε να χρησιμοποιήσετε στη θέση του αντικειμένου προορισμού. Αυτό το δημιουργημένο αντικείμενο μπορεί να επαναπροσδιορίσει βασικές λειτουργίες όπως λήψη, ρύθμιση και καθορισμό ιδιοτήτων. Μπορείτε επίσης να χρησιμοποιήσετε αυτά τα αντικείμενα διακομιστή μεσολάβησης για να καταγράψετε τις προσβάσεις ιδιοτήτων και να επικυρώσετε, να μορφοποιήσετε ή να καθαρίσετε εισόδους.
Για παράδειγμα:
συνθ originalObject = {
foo: "μπαρ"
}συνθ χειριστής = {
παίρνω: λειτουργία(στόχος, ιδιοκτησία){
ΕΠΙΣΤΡΟΦΗ στόχος[ιδιότητα];
},
σειρά: λειτουργία(στόχος, ιδιοκτησία, αξία){
στόχος[ιδιότητα] = αξία;
}
};
συνθ πληρεξούσιος = νέοςΠληρεξούσιο(originalObject, handler)
Αυτός ο κώδικας δημιουργεί ένα αντικείμενο στόχο, πρωτότυπο αντικείμενο, με ένα μόνο ακίνητο, fooκαι ένα αντικείμενο χειριστή, χειριστής. Το αντικείμενο χειριστή περιέχει δύο ιδιότητες, παίρνω και σειρά. Αυτές οι ιδιότητες είναι γνωστές ως παγίδες.
Μια παγίδα αντικειμένου διακομιστή μεσολάβησης είναι μια συνάρτηση που καλείται κάθε φορά που εκτελείτε μια καθορισμένη ενέργεια σε ένα αντικείμενο διακομιστή μεσολάβησης. Οι παγίδες σάς επιτρέπουν να παρακολουθείτε και να προσαρμόζετε τη συμπεριφορά του αντικειμένου διακομιστή μεσολάβησης. Η πρόσβαση σε μια ιδιότητα από το αντικείμενο διακομιστή μεσολάβησης καλεί το παίρνω παγίδα, και η τροποποίηση ή ο χειρισμός μιας ιδιότητας από το αντικείμενο διακομιστή μεσολάβησης καλεί το σειρά παγίδα.
Τέλος, ο κώδικας δημιουργεί ένα αντικείμενο διακομιστή μεσολάβησης με το Πληρεξούσιο κατασκευαστής. Περνάει πρωτότυπο αντικείμενο και χειριστής ως αντικείμενο στόχου και χειριστή, αντίστοιχα.
Χρήση αντικειμένων διακομιστή μεσολάβησης
Τα αντικείμενα διακομιστή μεσολάβησης έχουν πολλές χρήσεις στο JavaScript, μερικές από τις οποίες είναι οι ακόλουθες.
Προσθήκη λειτουργικότητας σε ένα αντικείμενο
Μπορείτε να χρησιμοποιήσετε ένα αντικείμενο διακομιστή μεσολάβησης για να αναδιπλώσετε ένα υπάρχον αντικείμενο και να προσθέσετε νέες λειτουργίες, όπως καταγραφή ή χειρισμός σφαλμάτων, χωρίς τροποποίηση του αρχικού αντικειμένου.
Για να προσθέσετε νέα λειτουργικότητα, θα χρειαστεί να χρησιμοποιήσετε το Πληρεξούσιο κατασκευαστή και ορίστε μία ή περισσότερες παγίδες για τις ενέργειες που θέλετε να υποκλέψετε.
Για παράδειγμα:
συνθ userObject = {
όνομα: "Κένεντι",
επίθετο: "Μάρτινς",
ηλικία: 20,
};συνθ χειριστής = {
παίρνω: λειτουργία(στόχος, ιδιοκτησία){
κονσόλα.κούτσουρο(«Αποκτώντας ιδιοκτησία»${ιδιότητα}"`);
ΕΠΙΣΤΡΟΦΗ στόχος[ιδιότητα];
},
σειρά: λειτουργία(στόχος, ιδιοκτησία, αξία){
κονσόλα.κούτσουρο("Ρύθμιση ιδιότητας"${ιδιότητα}"να εκτιμάς"${value}"`);
στόχος[ιδιότητα] = αξία;
},
};συνθ πληρεξούσιος = νέοςΠληρεξούσιο(userObject, handler);
κονσόλα.log (proxy.firstName); // Λήψη ιδιοκτησίας "firstName" Kennedy
κονσόλα.log (proxy.lastName); // Λήψη ιδιοκτησίας "επώνυμο" Μάρτινς
πληρεξούσιος.ηλικία = 23; // Ρύθμιση ιδιότητας "ηλικία" να εκτιμήσει "23"
Αυτό το μπλοκ κώδικα προσθέτει λειτουργικότητα μέσω των παγίδων διακομιστή μεσολάβησης, παίρνω και σειρά. Τώρα, όταν προσπαθείτε να αποκτήσετε πρόσβαση ή να τροποποιήσετε μια ιδιότητα του αντικείμενο χρήστη, το αντικείμενο διακομιστή μεσολάβησης θα καταγράψει πρώτα τη λειτουργία σας στην κονσόλα πριν αποκτήσει πρόσβαση ή τροποποιήσει την ιδιότητα.
Επικύρωση δεδομένων πριν από τη ρύθμιση σε ένα αντικείμενο
Μπορείτε να χρησιμοποιήσετε αντικείμενα διακομιστή μεσολάβησης για να επικυρώσετε δεδομένα και να διασφαλίσετε ότι πληρούν ορισμένα κριτήρια πριν τα ορίσετε σε ένα αντικείμενο. Μπορείτε να το κάνετε ορίζοντας τη λογική επικύρωσης στο α σειρά παγίδα στο χειριστής αντικείμενο.
Για παράδειγμα:
συνθ userObject = {
όνομα: "Κένεντι",
επίθετο: "Μάρτινς",
ηλικία: 20,
};συνθ χειριστής = {
παίρνω: λειτουργία(στόχος, ιδιοκτησία){
κονσόλα.κούτσουρο(«Αποκτώντας ιδιοκτησία»${ιδιότητα}"`);
ΕΠΙΣΤΡΟΦΗ στόχος[ιδιότητα];
},
σειρά: λειτουργία(στόχος, ιδιοκτησία, αξία){
αν (
ιδιοκτησία "ηλικία" &&
του είδους τιμή == "αριθμός" &&
τιμή > 0 &&
τιμή < 120
) {
κονσόλα.κούτσουρο("Ρύθμιση ιδιότητας"${ιδιότητα}"να εκτιμάς"${value}"`);
στόχος[ιδιότητα] = αξία;
} αλλού {
βολήνέοςΛάθος("Μη έγκυρη παράμετρος. Παρακαλώ ελέγξτε και διορθώστε.");
}
},
};
συνθ πληρεξούσιος = νέοςΠληρεξούσιο(userObject, handler);
proxy.age = 21;
Αυτό το μπλοκ κώδικα προσθέτει κανόνες επικύρωσης στο σειρά παγίδα. Μπορείτε να εκχωρήσετε οποιαδήποτε τιμή στο ηλικία ιδιοκτησία σε α αντικείμενο χρήστη παράδειγμα. Ωστόσο, με τους πρόσθετους κανόνες επικύρωσης, μπορείτε να εκχωρήσετε μια νέα τιμή στην ιδιότητα ηλικία μόνο εάν είναι αριθμός, μεγαλύτερος από 0 και μικρότερος από 120. Οποιαδήποτε τιμή προσπαθείτε να ορίσετε στο ηλικία Η ιδιότητα που δεν πληροί τα απαιτούμενα κριτήρια θα ενεργοποιήσει ένα σφάλμα και θα εκτυπώσει ένα μήνυμα σφάλματος.
Έλεγχος πρόσβασης στις ιδιότητες αντικειμένων
Μπορείτε να χρησιμοποιήσετε αντικείμενα διακομιστή μεσολάβησης για να αποκρύψετε ορισμένες ιδιότητες ενός αντικειμένου. Κάνετε αυτό ορίζοντας τη λογική περιορισμού στο παίρνω παγίδες για τις ιδιότητες στις οποίες θέλετε να ελέγξετε την πρόσβαση.
Για παράδειγμα:
συνθ userObject = {
όνομα: "Κένεντι",
επίθετο: "Μάρτινς",
ηλικία: 20,
Τηλέφωνο: 1234567890,
ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ: "[email protected]",
};συνθ χειριστής = {
παίρνω: λειτουργία(στόχος, ιδιοκτησία){
αν (ιδιοκτησία "τηλέφωνο" || ιδιοκτησία "ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ") {
βολήνέοςΛάθος("Απαγορεύεται η πρόσβαση σε πληροφορίες");
} αλλού {
κονσόλα.κούτσουρο(«Αποκτώντας ιδιοκτησία»${ιδιότητα}"`);
ΕΠΙΣΤΡΟΦΗ στόχος[ιδιότητα];
}
},
σειρά: λειτουργία(στόχος, ιδιοκτησία, αξία){
κονσόλα.κούτσουρο("Ρύθμιση ιδιότητας"${ιδιότητα}"να εκτιμάς"${value}"`);
στόχος[ιδιότητα] = αξία;
},
};συνθ πληρεξούσιος = νέοςΠληρεξούσιο(userObject, handler);
κονσόλα.log (proxy.firstName); // Λήψη ιδιοκτησίας "firstName" Kennedy
κονσόλα.log (proxy.email); // Ρίχνει σφάλμα
Το μπλοκ κώδικα παραπάνω προσθέτει ορισμένους περιορισμούς στο παίρνω παγίδα. Αρχικά, μπορείτε να έχετε πρόσβαση σε όλα τα διαθέσιμα ακίνητα στο αντικείμενο χρήστη. Οι πρόσθετοι κανόνες εμποδίζουν την πρόσβαση σε ευαίσθητες πληροφορίες, όπως το email ή το τηλέφωνο του χρήστη. Η προσπάθεια πρόσβασης σε οποιαδήποτε από αυτές τις ιδιότητες θα προκαλέσει σφάλμα.
Άλλες παγίδες μεσολάβησης
ο παίρνω και σειρά Οι παγίδες είναι οι πιο συνηθισμένες και χρήσιμες, αλλά υπάρχουν 11 άλλες παγίδες διακομιστή μεσολάβησης JavaScript. Αυτοί είναι:
- ισχύουν: Ο ισχύουν Το trap εκτελείται όταν καλείτε μια συνάρτηση στο αντικείμενο του διακομιστή μεσολάβησης.
- κατασκευάσει: Ο κατασκευάσει trap εκτελείται όταν χρησιμοποιείτε τον νέο τελεστή για να δημιουργήσετε ένα αντικείμενο από το αντικείμενο διακομιστή μεσολάβησης.
- διαγραφή Ιδιότητας: Ο διαγραφή Ιδιότητας η παγίδα εκτελείται όταν χρησιμοποιείτε το διαγράφω τελεστής για να αφαιρέσει μια ιδιότητα από το αντικείμενο διακομιστή μεσολάβησης.
- έχει - Ο έχει η παγίδα εκτελείται όταν χρησιμοποιείτε το σε χειριστή για να ελέγξει εάν υπάρχει μια ιδιότητα στο αντικείμενο του διακομιστή μεσολάβησης.
- δικά κλειδιά - Ο δικά κλειδιά η παγίδα τρέχει όταν καλείτε είτε το Object.getOwnPropertyNames ή Object.getOwnPropertySymbols λειτουργία στο αντικείμενο διακομιστή μεσολάβησης.
- getOwnPropertyDescriptor - Ο getOwnPropertyDescriptor η παγίδα τρέχει όταν καλείτε το Object.getOwnPropertyDescriptor λειτουργία στο αντικείμενο διακομιστή μεσολάβησης.
- defineProperty - Ο defineProperty η παγίδα τρέχει όταν καλείτε το Object.defineProperty λειτουργία στο αντικείμενο διακομιστή μεσολάβησης.
- πρόληψη επεκτάσεων - Ο πρόληψη επεκτάσεων η παγίδα τρέχει όταν καλείτε το Αντικείμενο.preventΕπεκτάσεις λειτουργία στο αντικείμενο διακομιστή μεσολάβησης.
- είναι Επεκτάσιμο - Ο είναι Επεκτάσιμο η παγίδα τρέχει όταν καλείτε το Αντικείμενο.είναι Επεκτάσιμο λειτουργία στο αντικείμενο διακομιστή μεσολάβησης.
- getPrototypeOf - Ο getPrototypeOf η παγίδα τρέχει όταν καλείτε το Object.getPrototypeOf λειτουργία στο αντικείμενο διακομιστή μεσολάβησης.
- setPrototypeOf - Ο setPrototypeOf η παγίδα τρέχει όταν καλείτε το Object.setPrototypeOf λειτουργία στο αντικείμενο διακομιστή μεσολάβησης.
Σαν το σειρά και παίρνω traps, μπορείτε να χρησιμοποιήσετε αυτά τα traps can για να προσθέσετε νέα επίπεδα λειτουργικότητας, επικύρωσης και ελέγχου στο αντικείμενό σας χωρίς να τροποποιήσετε το πρωτότυπο.
Τα μειονεκτήματα των αντικειμένων μεσολάβησης
Τα αντικείμενα διακομιστή μεσολάβησης μπορούν να είναι ένα ισχυρό εργαλείο για την προσθήκη προσαρμοσμένης λειτουργικότητας ή επικύρωσης σε ένα αντικείμενο. Έχουν όμως και κάποια πιθανά μειονεκτήματα. Ένα τέτοιο μειονέκτημα είναι η δυσκολία εντοπισμού σφαλμάτων, καθώς μπορεί να είναι δύσκολο να δει κανείς τι συμβαίνει στα παρασκήνια.
Τα αντικείμενα διακομιστή μεσολάβησης μπορεί επίσης να είναι δύσκολο στη χρήση, ειδικά εάν δεν τα γνωρίζετε. Θα πρέπει να εξετάσετε προσεκτικά αυτά τα μειονεκτήματα προτού χρησιμοποιήσετε αντικείμενα διακομιστή μεσολάβησης στον κώδικά σας.