Απώλεια περιβάλλοντος στον κώδικα μεθόδου στην OOP σε JavaScript
Κατά τη χρήση του πηγαίου κώδικα μιας μεθόδου κλάσης, το περιβάλλον (context) μπορεί να χαθεί. Ας δούμε ένα παράδειγμα. Ας υποθέσουμε ότι έχουμε την ακόλουθη κλάση:
class User {
#name;
constructor(name) {
this.#name = name;
}
getName() {
return this.#name;
}
}
Ας δημιουργήσουμε ένα αντικείμενο αυτής της κλάσης:
let user = new User('john');
Ας αποθηκεύσουμε τον κώδικα της μεθόδου σε μια μεταβλητή:
let func = user.getName;
Τη στιγμή που αποθηκεύουμε τη μέθοδο στη μεταβλητή,
το περιβάλλον χάθηκε. Τώρα το this
μέσα στον κώδικα της μεθόδου δεν θα δείχνει
προς το αντικείμενο της κλάσης. Ας ελέγξουμε, ας καλέσουμε
τη συνάρτησή μας:
console.log(func()); // σφάλμα
Για την επίλυση του προβλήματος, μπορούμε να δέσουμε
το περιβάλλον στη συνάρτηση, για παράδειγμα,
μέσω του bind:
func = func.bind(user);
console.log(func()); // λειτουργεί