Методы объекта, "this"
Для доступа к информации внутри объекта метод может использовать ключевое слово this.
let user = {
name: "John",
sayHi() {
alert(this.name); // "this" - это "текущий объект".
}
};
«this» не является фиксированным
В JavaScript ключевое слово «this» ведёт себя иначе, чем в большинстве других языков программирования. Его можно использовать в любой функции, даже если это не метод объекта.
❗ Вызов без объекта: this == undefined
В строгом режиме ("use strict") в таком коде значением this будет являться undefined. Если мы попытаемся получить доступ к this.name – это вызовет ошибку.
В нестрогом режиме значением this в таком случае будет глобальный объект (window в браузерe, мы вернёмся к этому позже в главе Глобальный объект). Это – исторически сложившееся поведение this, которое исправляется использованием строгого режима ("use strict").
Обычно подобный вызов является ошибкой программирования. Если внутри функции используется this, тогда она ожидает, что будет вызвана в контексте какого-либо объекта.
❗ Последствия свободного this
В JavaScript this является «свободным», его значение вычисляется в момент вызова метода и не зависит от того, где этот метод был объявлен, а скорее от того, какой объект вызывает метод (какой объект стоит «перед точкой»).
Эта концепция вычисления this в момент исполнения имеет как свои плюсы, так и минусы. С одной стороны, функция может быть повторно использована в качестве метода у различных объектов (что повышает гибкость).
У стрелочных функций нет «this»
Стрелочные функции особенные: у них нет своего «собственного» this. Если мы ссылаемся на this внутри такой функции, то оно берётся из внешней «нормальной» функции.
- Методы могут ссылаться на объект через
this. - Значение
thisопределяется во время исполнения кода.- При объявлении любой функции в ней можно использовать
this, но этотthisне имеет значения до тех пор, пока функция не будет вызвана. - Когда функция вызывается синтаксисом «метода» – object.method(), значением
thisво время вызова являетсяobject.
- При объявлении любой функции в ней можно использовать
🚀 Источник: https://learn.javascript.ru/object-methods 🚀 Доп. источник https://www.youtube.com/watch?v=aFxQvCqrUC0