Внутри функции, вызванной как метод объекта, значение this ссылается на сам объект, который вызывает метод. То есть this указывает на контекст объекта, который является контейнером для вызываемого метода.

const obj = {
  name: "John",
  greet: function () {
    console.log(`Hello, my name is ${this.name}`)
  },
}
 
obj.greet() // "Hello, my name is John"

В этом примере this внутри метода greet() ссылается на объект obj, потому что метод вызывается как метод этого объекта.

Если бы та же функция была определена как стрелочная функция, то значение this было бы унаследовано из контекста внешней функции, где была определена стрелочная функция.

const obj = {
  name: "John",
  greet: () => {
    console.log(`Hello, my name is ${this.name}`)
  },
}
 
obj.greet() // "Hello, my name is undefined"

В этом примере this внутри стрелочной функции greet() ссылается на контекст, в котором она была определена — глобальный объект в браузере или объект global в Node.js. Поэтому значение this.name будет undefined, потому что свойство name не определено в глобальном объекте.

Важно понимать, что использование стрелочных функций в качестве методов объектов может приводить к ошибкам и неожиданным результатам в работе кода, так как this внутри стрелочных функций не указывает на объект, который вызывает метод. Поэтому рекомендуется использовать обычные функции в качестве методов объектов, особенно если они используют значение this.


Назад