Ce este contextul într-o funcție?
sobes.tech AI
Răspuns de la AI
Contextul (this) într-o funcție JavaScript este determinat de modul în care a fost apelată funcția, nu de locul în care a fost declarat. El indică obiectul căruia îi aparține funcția sau care o apelează.
Modalități de determinare a contextului:
-
Context global: În afara funcțiilor sau dacă funcția este apelată fără un obiect explicit (
thisva fi egal cu obiectul globalwindowîn browser,globalîn Node.js sauundefinedîn modul strict).// În browser console.log(this === window); // true function showContext() { console.log(this); } showContext(); // window -
Contextul obiectului (metodă): Dacă funcția este apelată ca metodă a unui obiect (
obj.method()),thisdin interiorul funcției va face referire la acel obiect.const user = { name: 'Alice', greet: function() { console.log(`Salut, numele meu este ${this.name}`); } }; user.greet(); // Salut, numele meu este Alice -
Contextul constructorului: La apelarea unei funcții cu cuvântul cheie
new(new MyClass()), se creează un nou obiect, iarthisdin constructor face referire la acest nou obiect.function Person(name) { this.name = name; } const person1 = new Person('Bob'); console.log(person1.name); // Bob -
Indicare explicită a contextului: Metodele
call,applyșibindpermit setarea explicită a valorii luithispentru apelul funcției.call(thisArg, arg1, arg2, ...): Apelează funcția cuthissetat pethisArgși argumente individuale.apply(thisArg, [argsArray]): Apelează funcția cuthissetat pethisArgși argumente ca array.bind(thisArg, arg1, arg2, ...): Returnează o nouă funcție cuthisfixat pe valoarea dată.
function displayInfo(age) { console.log(`${this.name} are ${age} ani.`); } const person = { name: 'Charlie' }; displayInfo.call(person, 30); // Charlie are 30 ani. displayInfo.apply(person, [35]); // Charlie are 35 ani. const bondedDisplayInfo = displayInfo.bind(person, 40); bondedDisplayInfo(); // Charlie are 40 ani. -
Funcții săgeată: Funcțiile săgeată nu au propriul
this. Ele moștenescthisdin mediul lexical în care au fost definite.const anotherUser = { name: 'David', sayHello: function() { const innerArrow = () => { console.log(`Salut din arrow, ${this.name}`); }; innerArrow(); // `this` aici este anotherUser, moștenit de la sayHello }, sayHelloBad: () => { // practică proastă pentru metodele obiectului console.log(`Salut din arrow, ${this.name}`); } }; anotherUser.sayHello(); // Salut din arrow, David // În browser, în afara modului strict anotherUser.sayHelloBad(); // Salut din arrow, undefined (`this` - window)
Înțelegerea contextului este esențială pentru a lucra corect cu obiecte, metode și handleri de evenimente în JavaScript.