Junior
Τι είναι η λέξη-κλειδί 'this';
sobes.tech AI
Απάντηση από AI
Το this είναι μια λέξη-κλειδί στη JavaScript που αναφέρεται στο αντικείμενο στο πλαίσιο στο οποίο εκτελείται ο τρέχων κώδικας. Η τιμή του καθορίζεται από τον τρόπο με τον οποίο καλείται η συνάρτηση.
Οι κύριοι τρόποι ορισμού του this:
- Παγκόσμιο πλαίσιο: Εκτός μιας συνάρτησης, το
thisαναφέρεται στο παγκόσμιο αντικείμενο (windowστον browser,globalστο Node.js). - Κανονική κλήση συνάρτησης: Σε μη αυστηρή λειτουργία (
strict mode), τοthisαναφέρεται επίσης στο παγκόσμιο αντικείμενο (ήundefinedαν η συνάρτηση καλείται ως μέθοδος ενός αντικειμένου, αλλά αυτό το αντικείμενο είναιnullήundefined). Σε αυστηρή λειτουργία, τοthisείναι ίσο μεundefined. - Μέθοδος αντικειμένου: Αν η συνάρτηση καλείται ως μέθοδος ενός αντικειμένου (δηλαδή μέσω του τελεστή τελείας
.), τοthisαναφέρεται στο αντικείμενο που κατέχει τη μέθοδο. - Κατασκευαστής: Με τη χρήση του τελεστή
new, τοthisαναφέρεται στη νέα δημιουργούμενη παρουσία του αντικειμένου. - Μέθοδοι
call(),apply(),bind(): Αυτές οι μέθοδοι επιτρέπουν να ορίσετε ρητά την τιμή τουthisκατά την κλήση της συνάρτησης.bind()επιστρέφει μια νέα συνάρτηση με τοthisδεμένο, ενώ οιcall()καιapply()καλούν τη συνάρτηση με το καθορισμένοthis. - Βέλη συναρτήσεις (Arrow functions): Οι βέλεις συναρτήσεις δεν έχουν το δικό τους
this.thisσε μια βέλεια συνάρτηση κληρονομείται λεξικογραφικά από το περιβάλλον στο οποίο ορίστηκε.
Παραδείγματα:
// Παγκόσμιο πλαίσιο
console.log(this === window); // true (στον browser)
// Κανονική κλήση συνάρτησης
function myFunction() {
console.log(this);
}
myFunction(); // window (σε μη αυστηρή λειτουργία)
// Μέθοδος αντικειμένου
const myObject = {
myMethod: function() {
console.log(this);
}
};
myObject.myMethod(); // myObject
// Κατασκευαστής
function MyConstructor() {
this.value = 10;
console.log(this);
}
const instance = new MyConstructor(); // αντικείμενο παρουσία
// call(), apply(), bind()
function greet(name) {
console.log("Hello, " + name + "! My name is " + this.name);
}
const person = { name: "Alice" };
greet.call(person, "Bob"); // Hello, Bob! My name is Alice
greet.apply(person, ["Bob"]); // Hello, Bob! My name is Alice
const boundGreet = greet.bind(person);
boundGreet("Bob"); // Hello, Bob! My name is Alice
// Βέλεια συνάρτηση
const arrowFunction = () => {
console.log(this);
};
arrowFunction(); // window (αν ορίζεται στο παγκόσμιο πλαίσιο)
Η κατανόηση του πώς ορίζεται το this σε διάφορα πλαίσια είναι κρίσιμη για τη σωστή συγγραφή JavaScript κώδικα.