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 > метод объекта > глобальный вызов