JavaScript

Что такое this и как определить его значение?

this в JavaScript

this - это динамическая ссылка, которая определяется в момент вызова функции, а не в момент её объявления (исключение - стрелочные функции).

Правила определения this

1. Глобальный вызов

function show() { console.log(this) }
show()  // window (браузер) или undefined (strict mode)

2. Метод объекта

const obj = {
  name: "Объект",
  greet() { console.log(this.name) }
}
obj.greet()  // "Объект" - this === obj

3. Потеря контекста

const greet = obj.greet
greet()  // undefined (strict) / window.name (non-strict)
// this определяется по месту вызова, не по месту хранения

4. Явная привязка

greet.call(obj)    // "Объект"
greet.apply(obj)   // "Объект"
const bound = greet.bind(obj)
bound()            // "Объект"

5. new

function Person(name) { this.name = name }
const p = new Person("Иван")
// this === новый объект

6. Стрелочная функция - лексический this

const timer = {
  seconds: 0,
  start() {
    setInterval(() => {
      this.seconds++  // this === timer (из лексического окружения)
    }, 1000)
  }
}

Приоритет правил

new > bind/call/apply > метод объекта > глобальный вызов

Источники