Od čega zavisi vrednost konteksta izvršenja `this` u JavaScript-u?
sobes.tech АИ
Одговор од АИ
Vrednost this u JavaScript-u zavisi od načina pozivanja funkcije. Glavni scenariji:
-
Globalni kontekst: Van funkcija, u režimu stroge (
'use strict')thisjeundefined. Bez režima stroge — globalni objekat (windowu pretraživaču,globalu Node.js). -
Poziv metode objekta:
thisukazuje na objekat kojem pripada pozvana metoda.const obj = { prop: 'vrednost', method: function() { // this === obj console.log(this.prop); } }; obj.method(); -
Običan poziv funkcije: U režimu stroge
thisjeundefined. Bez režima stroge — globalni objekat.function myFunction() { // u režimu stroge this === undefined // bez režima stroge this === window (u pretraživaču) console.log(this); } myFunction(); -
Konstruktor (
new): Pri korišćenjunewsa konstruktor funkcijom,thisunutar funkcije ukazuje na novi objekat koji se kreira.function MyClass(name) { this.name = name; // this === novi objekat } const instance = new MyClass('test'); // instance.name === 'test' -
Jasno vezivanje (
call,apply,bind): Ove metode omogućavaju eksplicitno postavljanje vrednostithisza funkciju.call(thisArg, arg1, arg2, ...): poziva funkciju, postavljajućithisnathisArgi argumente pojedinačno.apply(thisArg, [argsArray]): poziva funkciju, postavljajućithisnathisArgi argumente kao niz.bind(thisArg): vraća novu funkciju sa trajno vezanimthis.
const anotherObj = { value: 42 }; function showValue() { console.log(this.value); } showValue.call(anotherObj); // Ispisuje 42 -
Streličaste funkcije (
=>): Streličaste funkcije nemaju sopstvenithis. Vrednostthisunutar streličaste funkcije nasledjuje se iz leksičkog konteksta u kojem je definisana.const outerObj = { name: 'Spoljašnji', method: function() { const arrowFunc = () => { // this ovde nasledjuje od method, koji se poziva kao metoda outerObj console.log(this.name); }; arrowFunc(); } }; outerObj.method(); // Ispisuje 'Spoljašnji' const anotherArrowFunc = () => { // this ovde nasledjuje od globalnog konteksta (ili undefined u režimu stroge) console.log(this); }; anotherArrowFunc(); -
Obrasci događaja u DOM-u: U većini slučajeva,
thisu događajnom rukovaocu ukazuje na DOM element na kojem se dogodio događaj.// Primer u pretraživaču const button = document.querySelector('button'); button.addEventListener('click', function() { // this === button console.log(this.tagName); });
Razumevanje ovih mehanizama je ključno za pravilno korišćenje this u JavaScript-u.