Junior
Šta je ključna reč 'this'?
sobes.tech АИ
Одговор од АИ
this је кључна реч у JavaScript-у која се односи на објекат у којем се извршава тренутни код. Његова вредност се одређује начином позива функције.
Главни начини одређивања this:
- Глобални контекст: Изван функције,
thisсе односи на глобални објекат (windowу прегледачу,globalу Node.js). - Обичан позив функције: У нестрог режиму (
strict mode)thisтакође одговара глобалном објекту (илиundefined, ако је функција позвана као метод објекта, али тај објекат јеnullилиundefined). У строжем режиму,thisје једнакоundefined. - Метод објекта: Ако се функција позива као метод објекта (тј. преко оператора тачке
.),thisсе односи на објекат који поседује метод. - Конструктор: Када се користи оператор
new,thisсе односи на ново креирани примерак објекта. - Методе
call(),apply(),bind(): Ови методи омогућавају експлицитно постављање вредностиthisприликом позива функције.bind()враћа нову функцију са привезанимthis, докcall()иapply()позивају функцију са наведенимthis. - Стрелчане функције: Стрелчане функције немају сопствени
this.thisу стрелачкој функцији лексикално наследи из окружења у којем је дефинисана.
Примери:
// Глобални контекст
console.log(this === window); // true (у прегледачу)
// Обичан позив функције
function myFunction() {
console.log(this);
}
myFunction(); // window (у нестрог режиму)
// Метод објекта
const myObject = {
myMethod: function() {
console.log(this);
}
};
myObject.myMethod(); // myObject
// Конструктор
function MyConstructor() {
this.value = 10;
console.log(this);
}
const instance = new MyConstructor(); // објекат-екземпляр
// 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
// Стрелчана функција
const arrowFunction = () => {
console.log(this);
};
arrowFunction(); // window (ако је дефинисана у глобалном контексту)
Разумевање како се this одређује у различитим контекстима је кључно за писање исправног JavaScript кода.