Ce este contextul în JavaScript?
sobes.tech AI
Răspuns de la AI
Contextul (this) în JavaScript este o referință la obiectul în cadrul căruia se execută funcția curentă. Valoarea sa este determinată de modul în care a fost apelată funcția, nu de locul unde a fost definită.
Modurile principale de a determina contextul:
-
Context global: În afara funcțiilor, în modul non-strict,
thisface referire la obiectul global (windowîn browser,globalîn Node.js). În modul strict,thisesteundefined.// Mod non-strict (în browser) console.log(this === window); // true // Mod strict "use strict"; console.log(this === undefined); // true -
Metoda unui obiect: Dacă o funcție este apelată ca metodă a unui obiect (
obj.method()),thisîn interiorul funcției face referire la acel obiect (obj).const user = { name: "John", greet: function() { console.log("Hello, " + this.name); } }; user.greet(); // Output: Hello, John (this face referire la user) -
Apelul funcției (
call,apply,bind): Metodelecallșiapplyapelează funcția cu un context explicit specificat.bindcreează o nouă funcție cu un context fix.function sayName(greeting) { console.log(greeting + ", " + this.name); } const person = { name: "Peter" }; sayName.call(person, "Hi"); // Output: Hi, Peter (this = person) sayName.apply(person, ["Hello"]); // Output: Hello, Peter (this = person) const boundSayName = sayName.bind(person, "Hey"); boundSayName(); // Output: Hey, Peter (this = person) -
Constructor (
new): Când o funcție este apelată cu operatorulnew, se creează un nou obiect gol, iarthisîn interiorul funcției constructor face referire la acest nou obiect.function Person(name) { this.name = name; } const john = new Person("John"); console.log(john.name); // Output: John (this în interiorul lui Person face referire la john) -
Funcții săgeată: Funcțiile săgeată nu au propriul lor context.
thisîn interiorul unei funcții săgeată este preluat din mediul exterior (lexical) în care a fost creată.const user = { name: "Alice", greet: function() { const innerGreet = () => { console.log("Hello, " + this.name); // this este preluat din greet (face referire la user) }; innerGreet(); } }; user.greet(); // Output: Hello, Alice
Înțelegerea modului în care this este determinat este esențială pentru a lucra corect cu obiecte, metode și handleri de evenimente în JavaScript.