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).
- Στη λειτουργία αυστηρού mode (
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 ανάλογα με τον τρόπο κλήσης.