Sobes.tech
Junior

Ce este cuvântul cheie 'this'?

sobes.tech AI

Răspuns de la AI

this este un cuvânt cheie în JavaScript care face referire la obiectul în contextul în care este executat codul curent. Valoarea sa este determinată de modul în care este apelată funcția.

Principalele moduri de a defini this:

  • Context global: În afara unei funcții, this face referire la obiectul global (window în browser, global în Node.js).
  • Apel obișnuit al funcției: În modul non-strict (strict mode), this face referire și el la obiectul global (sau undefined dacă funcția este apelată ca metodă a unui obiect, dar acel obiect este null sau undefined). În modul strict, this este egal cu undefined.
  • Metoda obiectului: Dacă funcția este apelată ca metodă a unui obiect (adică, prin operatorul punct .), this face referire la obiectul care deține metoda.
  • Constructor: La utilizarea operatorului new, this face referire la noua instanță a obiectului creată.
  • Metodele call(), apply(), bind(): Aceste metode permit stabilirea explicită a valorii lui this la apelarea funcției. bind() returnează o funcție nouă cu this legat, în timp ce call() și apply() apelează funcția cu this specificat.
  • Funcții săgeată: Funcțiile săgeată nu au propriul this. this într-o funcție săgeată este moștenit lexical din mediul înconjurător în care a fost definită.

Exemple:

// Context global
console.log(this === window); // true (în browser)

// Apel normal al funcției
function myFunction() {
  console.log(this);
}
myFunction(); // window (în modul non-strict)

// Metodă a obiectului
const myObject = {
  myMethod: function() {
    console.log(this);
  }
};
myObject.myMethod(); // myObject

// Constructor
function MyConstructor() {
  this.value = 10;
  console.log(this);
}
const instance = new MyConstructor(); // obiect instanță

// 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

// Funcție săgeată
const arrowFunction = () => {
  console.log(this);
};
arrowFunction(); // window (dacă este definit în contextul global)

Înțelegerea modului în care this este determinat în diferite contexte este esențială pentru scrierea unui cod JavaScript corect.