Junior
Šta će se prikazati u konzoli ako koristite this u console.log?
sobes.tech АИ
Одговор од АИ
Zavisno od konteksta poziva console.log i strogog režima JavaScript ("use strict").
U globalnom kontekstu (izvan funkcija i modula):
- U nestriktivnom režimu (
"use strict"nije prisutan ili je deklarisan unutar funkcije):thisće se odnositi na globalni objekat (windowu pretraživaču,globalu Node.js-u). - U strogom režimu:
thisće bitiundefined.
Unutar funkcije:
- U nestriktivnom režimu:
thisće se odnositi na globalni objekat ako je funkcija pozvana kao obična funkcija (myFunction()). Ako je funkcija pozvana kao metod objekta (myObject.myMethod()),thisće se odnositi na objekat (myObject). Ako se funkcija koristi kao konstruktor (new MyClass()),thisće se odnositi na novi primerak objekta. - U strogom režimu:
thisće bitiundefinedako je funkcija pozvana kao obična funkcija. U ostalim slučajevima (metod objekta, konstruktor) ponašanje je isto kao u nestriktivnom režimu.
Unutar streličaste funkcije (=>):
thisse leksički nasleđuje iz okoline. To znači da će vrednostthisunutar streličaste funkcije biti ista kao i u spoljašnjoj običnoj funkciji ili u globalnom kontekstu gde je streličasta funkcija deklarisana, nezavisno od načina poziva. Streličaste funkcije ne vežuthisza svoj sopstveni kontekst poziva.
Primer:
// Globalni kontekst
console.log(this); // U pretraživaču: Window, u Node.js: global (nestriktivni režim)
// U pretraživaču: undefined, u Node.js: undefined (strog režim)
// Obična funkcija
function showThisNonStrict() {
console.log(this);
}
showThisNonStrict(); // U pretraživaču: Window, u Node.js: global
function showThisStrict() {
"use strict";
console.log(this);
}
showThisStrict(); // undefined
const myObject = {
methodNonStrict: function() {
console.log(this);
},
methodStrict: function() {
"use strict";
console.log(this);
}
};
myObject.methodNonStrict(); // myObject
myObject.methodStrict(); // myObject
// Streličasta funkcija
const arrowFunc = () => {
console.log(this);
};
arrowFunc(); // U pretraživaču: Window, u Node.js: global (nasleđuje iz globalnog konteksta)
const myObjectWithArrow = {
arrowMethod: () => {
console.log(this);
}
};
myObjectWithArrow.arrowMethod(); // U pretraživaču: Window, u Node.js: global (nasleđuje iz konteksta deklaracije)