Каков механизм определения контекста (this) для стрелочных функций внутри класса?

Какова логика благодаря которой стрелочная функция определяет значение переменной `this` внутри класса? Похоже, что стрелочная функция ищет переменную `this` в обычной функции, которая окружает её. Если не находит её, то ищет на уровне `window`, поэтому `this` становится равным `window`. Можно ли считать, что в случае с классом `this` указывает на сам класс, так как класс является синтаксическим сахаром для обычной функции? Как следует из вашего примера, каким образом определяется, что в классе `this` ссылается уже на объект `Test`, хотя выше нет обычной функции?
  • 2 мая 2024 г. 19:30
Ответы на вопрос 1
В случае со стрелочными функциями внутри классов, значение `this` определяется лексически, то есть оно берется из окружающего контекста, где была объявлена стрелочная функция. Это отличается от обычных функций, у которых значение `this` определяется во время вызова.

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

Пример:

```javascript
class Test {
  constructor() {
    this.name = 'Test';
    this.arrowFunc = () => {
      console.log(this.name); // this ссылается на объект Test
    }
  }
}

const test = new Test();
test.arrowFunc(); // Выведет 'Test'
```

В данном примере, при вызове `test.arrowFunc()`, значение `this` внутри стрелочной функции будет указывать на объект `Test`, так как она была объявлена внутри метода класса, который имеет значение `this`.
Похожие вопросы