Στατικές ιδιότητες και μέθοδοι
Μέχρι τώρα, έχουμε δει πως μπορούμε να δημιουργήσουμε αντικείμενα από μια κλάση. Αυτά τα αντικείμενα έχουν τις δικές τους ιδιότητες και μεθόδους.
Μπορούμε όμως να έχουμε και ιδιότητες και μεθόδους που ανήκουν στην κλάση και όχι στα αντικείμενα. Αυτές οι ιδιότητες και μέθοδοι ονομάζονται static.
Στατικές ιδιότητες
Μια στατική ιδιότητα είναι μια ιδιότητα που ανήκει στην κλάση και όχι στα αντικείμενα. Για να δηλώσουμε μια στατική ιδιότητα, χρησιμοποιούμε τη λέξη-κλειδί static
:
class MyClass {
static myProperty = 42;
}
console.log(MyClass.myProperty); // 42
Μπορούμε να έχουμε πρόσβαση στις στατικές ιδιότητες απευθείας από την κλάση, χωρίς να χρειάζεται να δημιουργήσουμε αντικείμενα. Αν προσπαθήσουμε να προσπελάσουμε μια στατική ιδιότητα από ένα αντικείμενο, θα μας επιστραφεί σφάλμα:
class MyClass {
static myProperty = 42;
}
let obj = new MyClass();
console.log(obj.myProperty); // TypeError: obj.myProperty is not a function
Στατικές μεθόδοι
Μια στατική μέθοδος είναι μια μέθοδος που ανήκει στην κλάση και όχι στα αντικείμενα. Για να δηλώσουμε μια στατική μέθοδο, χρησιμοποιούμε τη λέξη-κλειδί static
:
class MyClass {
static myMethod() {
return 42;
}
}
console.log(MyClass.myMethod()); // 42
Μπορούμε να καλέσουμε μια στατική μέθοδο απευθείας από την κλάση, χωρίς να χρειάζεται να δημιουργήσουμε αντικείμενα. Αν προσπαθήσουμε να καλέσουμε μια στατική μέθοδο από ένα αντικείμενο, θα μας επιστραφεί σφάλμα:
class MyClass {
static myMethod() {
return 42;
}
}
let obj = new MyClass();
console.log(obj.myMethod()); // TypeError: obj.myMethod is not a function
Singleton
Ένα παράδειγμα χρήσης στατικών μεθόδων και ιδιοτήτων είναι η δημιουργία ενός singleton:
class Singleton {
static instance = null;
static getInstance() {
if (Singleton.instance === null) {
Singleton.instance = new Singleton();
}
return Singleton.instance;
}
}
let singleton1 = Singleton.getInstance();
console.log(singleton1 === Singleton.instance); // true
let singleton2 = Singleton.getInstance();
console.log(singleton2 === Singleton.instance); // true
Στο παραπάνω παράδειγμα, η μέθοδος getInstance
επιστρέφει πάντα το ίδιο αντικείμενο, το οποίο αποθηκεύεται στη στατική ιδιότητα instance
.
Έτσι, όταν καλείται η μέθοδος getInstance
δύο φορές, επιστρέφεται το ίδιο αντικείμενο. Αυτό είναι χρήσιμο όταν θέλουμε να διασφαλίσουμε ότι υπάρχει μόνο ένα αντικείμενο σε μία κλάση.