De ce depinde valoarea contextului de execuție al lui `this` în JavaScript?
sobes.tech AI
Răspuns de la AI
Valoarea this în JavaScript depinde de modul în care este apelată funcția. Scenariile principale:
-
Context global: În afara funcțiilor, în modul strict (
'use strict'),thisesteundefined. Fără modul strict, este obiectul global (windowîn browser,globalîn Node.js). -
Apelarea unei metode a unui obiect:
thisindică către obiectul căruia îi aparține metoda apelată.const obj = { prop: 'valoare', method: function() { // this === obj console.log(this.prop); } }; obj.method(); -
Apel normal al unei funcții: În modul strict,
thisesteundefined. Fără modul strict, este obiectul global.function myFunction() { // în modul strict this === undefined // fără modul strict this === window (în browser) console.log(this); } myFunction(); -
Constructor (
new): Folosind operatorulnewcu o funcție constructor,thisdin interiorul funcției face referire la noul obiect creat.function MyClass(name) { this.name = name; // this === obiectul nou creat } const instance = new MyClass('test'); // instance.name === 'test' -
Legare explicită (
call,apply,bind): Metodelecall,applyșibindpermit stabilirea explicită a valoriithispentru o funcție.call(thisArg, arg1, arg2, ...): Apelează funcția, setândthislathisArgși transmitând argumentele individual.apply(thisArg, [argsArray]): Apelează funcția, setândthislathisArgși transmitând argumentele ca array.bind(thisArg): Returnează o nouă funcție cuthislegat permanent.
const anotherObj = { value: 42 }; function showValue() { console.log(this.value); } showValue.call(anotherObj); // Va afișa 42 -
Funcții săgeată (
=>): Funcțiile săgeată nu au propriulthis. Valoareathisîn interiorul unei funcții săgeată moștenește din contextul lexical în care a fost definită.const outerObj = { name: 'Outer', method: function() { const arrowFunc = () => { // this moștenește din method, care este apelată ca metodă a outerObj console.log(this.name); }; arrowFunc(); } }; outerObj.method(); // Va afișa 'Outer' const anotherArrowFunc = () => { // this moștenește din contextul global (sau undefined în modul strict) console.log(this); }; anotherArrowFunc(); -
Manipulatoare de evenimente DOM: În cele mai multe cazuri,
thisîn handler-ul de eveniment face referire la elementul DOM pe care a avut loc evenimentul.// Exemplu în browser const button = document.querySelector('button'); button.addEventListener('click', function() { // this === button console.log(this.tagName); });
Înțelegerea acestor mecanisme este esențială pentru utilizarea corectă a this în JavaScript.