Sobes.tech
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 кода.