Sobes.tech
Middle

Μίλησε για αυτό σε διαφορετικά πλαίσια: στις μεθόδους αντικειμένων, σε βέλη συναρτήσεις και σε κανονικές συναρτήσεις.

sobes.tech AI

Απάντηση από AI

Στην JavaScript, η τιμή του this εξαρτάται από το πλαίσιο κλήσης της συνάρτησης:

  • Στα μεθόδους αντικειμένου το this αναφέρεται στο αντικείμενο στο οποίο ανήκει η μέθοδος:
const obj = {
  name: 'Alice',
  greet() {
    console.log(this.name);
  }
};
obj.greet(); // Alice
  • Σε μια κανονική συνάρτηση (που δεν είναι μέθοδος) το this εξαρτάται από τη λειτουργία και τον τρόπο κλήσης:
    • Στη λειτουργία αυστηρού mode ('use strict') — το this θα είναι undefined.
    • Στη μη αυστηρή λειτουργία — θα είναι το παγκόσμιο αντικείμενο (window στους browsers).
function foo() {
  console.log(this);
}
foo(); // window ή undefined σε strict mode
  • Στις βελόνα (arrow) συναρτήσεις το this κληρονομείται λεξικογραφικά από το εξωτερικό πλαίσιο, δηλαδή από το scope όπου δηλώθηκε η συνάρτηση, όχι από το σημείο κλήσης:
const obj = {
  name: 'Bob',
  arrowFunc: () => {
    console.log(this.name);
  },
  regularFunc() {
    const arrow = () => {
      console.log(this.name);
    };
    arrow();
  }
};
obj.arrowFunc(); // undefined ή το όνομα από το εξωτερικό πλαίσιο
obj.regularFunc(); // Bob

Επομένως, οι βελόνα (arrow) συναρτήσεις είναι χρήσιμες για τη διατήρηση του this από το εξωτερικό πλαίσιο, ενώ οι κανονικές συναρτήσεις και μέθοδοι έχουν το δικό τους this ανάλογα με τον τρόπο κλήσης.