Skip to main content

Στατικές ιδιότητες και μέθοδοι

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

Μπορούμε όμως να έχουμε και ιδιότητες και μεθόδους που ανήκουν στην κλάση και όχι στα αντικείμενα. Αυτές οι ιδιότητες και μέθοδοι ονομάζονται 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 δύο φορές, επιστρέφεται το ίδιο αντικείμενο. Αυτό είναι χρήσιμο όταν θέλουμε να διασφαλίσουμε ότι υπάρχει μόνο ένα αντικείμενο σε μία κλάση.