Εφαρμογές Οδηγών ECMAScript

Η δημιουργία και η καταστροφή αντικειμένων συμβαίνουν κατά τη διάρκεια της εκτέλεσης του JavaScript, η κατανόηση της σημασίας αυτού του μοτίβου είναι κρίσιμη για την κατανόηση ολόκληρης της γλώσσας.

Δήλωση και ενσωμάτωση

Ο τρόπος δημιουργίας αντικειμένων είναι με τη χρήση του κλειδιού new ακολουθούμενο από το όνομα της κλάσης που θα ιδρυθεί:

var oObject = new Object();
var oStringObject = new String();

Η πρώτη γραμμή κώδικα δημιουργεί μια στιγμιαία εκτέλεση της κλάσης Object και την αποθηκεύει στη μεταβλητή oObject. Η δεύτερη γραμμή κώδικα δημιουργεί μια στιγμιαία εκτέλεση της κλάσης String και την αποθηκεύει στη μεταβλητή oStringObject. Αν ο κατασκευαστής δεν έχει παράμετροι, τα παρενθέσεις δεν είναι απαραίτητες. Επομένως, μπορεί να γράψουμε τις δύο γραμμές του παραπάνω κώδικα ως εξής:

var oObject = new Object;
var oStringObject = new String;

Αναφορά αντικειμένου

Στα προηγούμενα κεφάλαια, έχουμε παρουσιάσειΗ έννοια του τύπου αναφοράςΣτο ECMAScript, δεν μπορεί να αποκτηθεί πρόσβαση στην φυσική εκπροσώπηση του αντικειμένου, αλλά μόνο στην αναφορά του αντικειμένου. Καθεξής που δημιουργείται ένα αντικείμενο, αποθηκεύεται στη μεταβλητή η αναφορά του αντικειμένου, και όχι το αντικείμενο του ίδιου.

Απορρίφθηκε το αντικείμενο

Το ECMAScript διαθέτει πρόγραμμα συλλογής απορριπμάτων (garbage collection routine), που σημαίνει ότι δεν χρειάζεται να καταστρέφουμε ειδικά αντικείμενα για να απελευθερώσουμε μνήμη. Όταν δεν υπάρχει καμία αναφορά σε αντικείμενα, λέγεται ότι το αντικείμενο έχει απορριφθεί (dereference). Όταν εκτελείται το πρόγραμμα συλλογής απορριπμάτων, όλα τα απορριφθέντα αντικείμενα καταστρέφονται. Καθεξής που ολοκληρώνεται η εκτέλεση ενός κώδικα από μια συνάρτηση, το πρόγραμμα συλλογής απορριπμάτων εκτελείται, απελευθερώνοντας όλες τις τοπικές μεταβλητές, και σε άλλες περιπτώσεις που δεν είναι δυνατό να προβλεφθούν, το πρόγραμμα συλλογής απορριπμάτων εκτελείται επίσης.

Η ρύθμιση όλων των αναφορών του αντικειμένου σε null μπορεί να εξαναγκάσει τη διαγραφή του αντικειμένου. Π.χ.:

var oObject = new Object;
// κάντε κάτι με το αντικείμενο εδώ
oObject = null;

Όταν ο μεταβλητός oObject ρυθμίζεται σε null, η αναφορά στο πρώτο δημιουργημένο αντικείμενο δεν υπάρχει πλέον. Αυτό σημαίνει ότι η επόμενη εκτέλεση του προγράμματος συλλογής άχρηστης μνήμης θα διαλύσει το αντικείμενο.

Μετά τη χρήση κάθε αντικειμένου, είναι καλή πρακτική να το διαλύσετε για να απελευθερώσετε την μνήμη. Αυτό διασφαλίζει επίσης ότι δεν χρησιμοποιείτε αντικείμενα που δεν είναι πλέον προσβάσιμα, προφανώς για να αποφύγετε τα σφάλματα σχεδιασμού προγραμμάτων. Επιπλέον, οι παλιές πλοηγούς (όπως ο IE/MAC) δεν έχουν πλήρη προγράμματα συλλογής άχρηστης μνήμης, οπότε όταν αποσυνδέεται η σελίδα, τα αντικείμενα μπορεί να μην διαλυθούν σωστά. Η διαγραφή του αντικειμένου και όλων των χαρακτηριστικών του είναι η καλύτερη μέθοδος για να διασφαλίσετε τη σωστή χρήση της μνήμης.

Σημείωση:Να είστε προσεκτικοί όταν διαλύετε όλες τις αναφορές του αντικειμένου. Αν το αντικείμενο έχει δύο ή περισσότερες αναφορές, πρέπει να διαλύσετε σωστά το αντικείμενο, ρυθμίζοντας όλες τις αναφορές του σε null.

Πρόωρη και αργή σύνδεση

Η σύνδεση (binding) είναι η μέθοδος που συνδέει την διεπαφή του αντικειμένου με την εγκατάσταση του αντικειμένου.

Η πρόωρη σύνδεση (early binding) αναφέρεται στη σύνδεση των ιδιοτήτων και των μεθόδων του αντικειμένου πριν από την ενσωμάτωση του αντικειμένου, έτσι ώστε ο συναγερμός ή ο εκτελεστικός μπορεί να μετατρέψει πριν από την εκτέλεση. Σε γλώσσες όπως το Java και το Visual Basic, με την πρόωρη σύνδεση, μπορεί να χρησιμοποιηθεί το IntelliSense (δηλαδή η λειτουργία που παρέχει τη λίστα των ιδιοτήτων και των μεθόδων του αντικειμένου στον προγραμματιστή). Το ECMAScript δεν είναι ένας ισχυρός τύπος γλώσσας, οπότε δεν υποστηρίζει την πρόωρη σύνδεση.

Από την άλλη πλευρά, η αργή σύνδεση (late binding) αναφέρεται σε έναν συναγερμό ή έναν εκτελεστικό που δεν γνωρίζει τον τύπο του αντικειμένου πριν από την εκτέλεση. Με την αργή σύνδεση, δεν χρειάζεται να ελέγξει τον τύπο του αντικειμένου, αλλά να ελέγξει αν το αντικείμενο υποστηρίζει ιδιότητες και μεθόδους. Όλοι οι μεταβλητές ECMAScript χρησιμοποιούν το μεθόδου αργής σύνδεσης. Αυτό επιτρέπει την εκτέλεση μεγάλου αριθμού λειτουργιών αντικειμένων χωρίς καμία τιμωρία.