Skip to main content

Методы объекта, "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 внутри такой функции, то оно берётся из внешней «нормальной» функции.

  1. Методы могут ссылаться на объект через this.
  2. Значение this определяется во время исполнения кода.
    • При объявлении любой функции в ней можно использовать this, но этот this не имеет значения до тех пор, пока функция не будет вызвана.
    • Когда функция вызывается синтаксисом «метода» – object.method(), значением this во время вызова является object.

🚀 Источник: https://learn.javascript.ru/object-methods 🚀 Доп. источник https://www.youtube.com/watch?v=aFxQvCqrUC0