Χώρος Εφαρμογής Οντοτήτων της Γλώσσας Γραμματοσειράς ECMAScript

Η περιοχή δράσης είναι η περιοχή εφαρμογής των μεταβλητών.

Κοινή, ιδιωτική και προστατευμένη περιοχή δράσης

Έννοια

Στην παραδοσιακή προγραμματιστική με βάση τα αντικείμενα, η προσοχή επικεντρώνεται στην κοινή και την ιδιωτική περιοχή δράσης. Οι ιδιότητες των αντικειμένων στην κοινή περιοχή δράσης μπορούν να προσπελαθούν από το εξωτερικό του αντικειμένου, δηλαδή όταν ο προγραμματιστής δημιουργεί μια ενότητα του αντικειμένου, μπορεί να χρησιμοποιήσει τις κοινές ιδιότητες του. Οι ιδιότητες στην ιδιωτική περιοχή δράσης μπορούν να προσπελαθούν μόνο εντός του αντικειμένου, δηλαδή για τον εξωτερικό κόσμο, αυτές οι ιδιότητες δεν υπάρχουν. Αυτό σημαίνει ότι αν μια κλάση καθορίζει ιδιωτικές ιδιότητες και μεθόδους, οι υποκλάσεις της δεν μπορούν να προσπελάσουν αυτές τις ιδιότητες και μεθόδους.

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

Το ECMAScript έχει μόνο κοινή περιοχή δράσης

Η συζήτηση για την περιοχή δράσης του ECMAScript είναι σχεδόν άχρηστη, επειδή στο ECMAScript υπάρχει μόνο μια περιοχή δράσης - η κοινή περιοχή δράσης. Όλες οι ιδιότητες και οι μεθόδους όλων των αντικειμένων του ECMAScript είναι κοινές. Επομένως, όταν καθορίζετε τις δικές σας κλάσεις και αντικείμενα, πρέπει να είστε πολύ προσεκτικοί. Θυμηθείτε, όλες οι ιδιότητες και οι μεθόδους είναι κοινές κατά default!

Συμβουλευτική λύση

Πολλοί προγραμματιστές έχουν προτείνει αποτελεσματικά μοτίβα περιοχής ιδιοκτησίας στο διαδίκτυο, που λύνουν αυτό το πρόβλημα του ECMAScript.

Επειδή λείπει η ιδιωτική περιοχή δράσης, οι προγραμματιστές καθόρισαν μια συμβολή, που λέει ποια ιδιότητες και μεθόδους πρέπει να θεωρούνται ιδιωτικές. Η συμβολή αυτή规定ει την προσθήκη υπογραμμίσματος στις ιδιότητες:

obj._color_ = "blue";

Σε αυτόν τον κώδικα, η ιδιότητα color είναι ιδιωτική. Προσοχή, η υπογραφή δεν αλλάζει την πραγματικότητα ότι η ιδιότητα είναι κοινή, αλλά μόνο λέει στους άλλους προγραμματιστές ότι η ιδιότητα πρέπει να θεωρείται ιδιωτική.

Κάποιοι προγραμματιστές προτιμούν να χρησιμοποιούν μοναδικό κάτω χαρακτήρα για να σηματοποιήσουν τα ιδιωτικά μέλη, π.χ. obj._color.

Η στατική κλίμακα

Οι ιδιότητες και οι μεθόδους που ορίζονται από την στατική κλίμακα μπορούν να προσέγγιστούν από την ίδια θέση οποιαδήποτε στιγμή. Στο Java, οι κλάσεις μπορούν να έχουν ιδιότητες και μεθόδους χωρίς να χρειάζεται να ιδρύεται το αντικείμενο της κλάσης, π.χ. η κλάση java.net.URLEncoder, η συνάρτηση encode() της οποίας είναι στατική μέθοδος.

Το ECMAScript δεν έχει στατική κλίμακα

Στα σοβαρά, το ECMAScript δεν έχει στατική κλίμακα. Ωστόσο, μπορεί να παρέχει ιδιότητες και μεθόδους στις κτιστοποιήσεις. Θυμάστε; Ο κατασκευαστής είναι απλώς μια συνάρτηση. Οι συναρτήσεις είναι αντικείμενα, και τα αντικείμενα μπορούν να έχουν ιδιότητες και μεθόδους. Για παράδειγμα:

function sayHello() {
  alert("hello");
}
sayHello.alternate = function() {
  alert("hi");
}
sayHello();		// Εκτύπωση "hello"
sayHello.alternate();	// Εκτύπωση "hi"

Προσπάθησε να το κάνεις (TIY)

Σε αυτό το σημείο, η μέθοδος alternate() είναι στην πραγματικότητα η μέθοδος της function sayHello. Μπορείτε να την καλέσετε όπως μια κανονική συνάρτηση, π.χ. sayHello() για να εκτυπώσετε "hello", ή να την καλέσετε ως sayHello.alternate() για να εκτυπώσετε "hi". Εστω και αν είναι έτσι, η alternate() είναι μέθοδος του sayHello() στο κοινό περιβάλλον, όχι στατική μέθοδος.

Η λέξη-κλειδί this

Η λειτουργία του this

Η ένας από τους πιο σημαντικούς όρους που πρέπει να κατανοήσουμε στο ECMAScript είναι η χρήση της λέξης-κλειδί this, η οποία χρησιμοποιείται στις μεθόδους του αντικειμένου. Η λέξη-κλειδί this πάντα δείχνει το αντικείμενο που καλεί τη μέθοδο, π.χ.:

var oCar = new Object;
oCar.color = "red";
oCar.showColor = function() {
  alert(this.color);
};
oCar.showColor();		// Εκτύπωση "red"

Προσπάθησε να το κάνεις (TIY)

Στο παρακάτω κώδικα, η λέξη-κλειδί this χρησιμοποιείται στη μέθοδο showColor() του αντικειμένου. Σε αυτό το περιβάλλον, το this ισούται με το oCar. Ο παρακάτω κώδικας έχει την ίδια λειτουργία με τον παραπάνω:

var oCar = new Object;
oCar.color = "red";
oCar.showColor = function() {
  alert(oCar.color);
};
oCar.showColor();		// Εκτύπωση "red"

Προσπάθησε να το κάνεις (TIY)

Οι λόγοι χρήσης του this

Γιατί χρησιμοποιούμε το this; Επειδή όταν ιδρύουμε ένα αντικείμενο, δεν μπορούμε ποτέ να είναι σίγουροι για το όνομα της μεταβλητής που θα χρησιμοποιήσει ο προγραμματιστής. Χρησιμοποιώντας το this, μπορούμε να επαναχρησιμοποιήσουμε την ίδια συνάρτηση σε πολλούς τόπους. Σκεφτείτε τον παρακάτω παράδειγμα:

function showColor() {
  alert(this.color);
};
var oCar1 = new Object;
oCar1.color = "red";
oCar1.showColor = showColor;
var oCar2 = new Object;
oCar2.color = "blue";
oCar2.showColor = showColor;
oCar1.showColor();		//Εκτύπωση "red"
oCar2.showColor();		//Εκτύπωση "blue"

Προσπάθησε να το κάνεις (TIY)

Στον παραπάνω κώδικα, οριστείς πρώτα η συνάρτηση showColor() με το this, και στη συνέχεια δημιουργήθηκαν δύο αντικείμενα (oCar1 και oCar2), μιας από τις ιδιότητες του οποίου ονομάζεται color και έχει τιμή "red", και της άλλης που έχει τιμή "blue". Και τα δύο αντικείμενα έχουν την ιδιότητα showColor που δείχνει στην αρχική συνάρτηση showColor() (σημείωση: δεν υπάρχει πρόβλημα ονόματος, γιατί ένα είναι παγκόσμιο και το άλλο είναι ιδιότητα αντικειμένου). Η κλήση showColor() κάθε αντικειμένου θα εκτυπώσει "red" για το oCar1 και "blue" για το oCar2. Αυτό συμβαίνει επειδή όταν καλείται το oCar1.showColor(), το κλειδί this στην συνάρτηση είναι το oCar1. Όταν καλείται το oCar2.showColor(), το κλειδί this στην συνάρτηση είναι το oCar2.

Σημείωση: Ορισμός ιδιοτήτων αντικειμένων πρέπει να γίνει με τη χρήση του κλειδιού this. Για παράδειγμα, αν χρησιμοποιήσετε τον εξής κώδικα, η μέθοδος showColor() δεν θα εκτελεστεί:

function showColor() {
  alert(color);
};

Αν δεν χρησιμοποιείτε αντικείμενα ή τον κλειδί this για να αναφέρετε μεταβλητές, το ECMAScript θα το θεωρήσει τοπική ή παγκόσμια μεταβλητή. Στη συνέχεια, η συνάρτηση θα αναζητήσει την τοπική ή παγκόσμια μεταβλητή με το όνομα color, αλλά δεν θα τη βρει. Τι θα συμβεί; Η συνάρτηση θα εμφανίσει το "null" στην προειδοποίηση.