Несколько слов об «этом»:

Ключевое слово this функции ведет себя в JavaScript немного иначе, чем в других языках. Он также имеет некоторые отличия между строгим режимом и нестрогим режимом.
Это значение — это свойство контекста выполнения (глобального, функционального или eval), которое в нестрогом режиме всегда является ссылкой на объект, а в строгом режиме может быть любым значением.

📓 Несколько советов:

  • Определяется тем, как вызывается функция (привязка среды выполнения) и может быть разной при каждом вызове.
  • Не может быть установлено назначением.

Вопросы❓

  • Каков будет вывод следующего кода (запишите их в последовательном порядке для проверки)?

[Примечание: представьте, что этот код запускается в консоли отладчика современного браузера. Также этот код не запускается в строгом режиме.]

console.log(this)
function Foo () {
  console.log(this);
}
Foo();
Foo.call();
Foo.apply();
var foo = new Foo();
var bar = { name: 'Bar' };
Foo(bar);
Foo.call(bar);
Foo.apply(bar);

Проверяйте результаты 😏

Чтобы не видеть результатов, я разместил его в этой корзине. Вы также можете подтвердить результаты, вставив код в любую консоль отладчика.

Должные объяснения 😅

  1. Поскольку значение this зависит от контекста, то this в глобальном контексте будет относиться к объекту window.
  2. В нестрогом режиме значением this в таком случае будет глобальный объект (window в браузере, мы вернемся к нему позже в главе Глобальный объект). Это историческое поведение, которое "use strict" исправляет.
  3. То же, что 2.
  4. То же, что 2.
  5. При создании объекта из функции-конструктора this относится к вновь созданному объекту.
  6. То же, что 2.
  7. Метод вызова принимает первый параметр в качестве контекста, поэтому, если мы предоставляем объект, он становится контекстом.
    What if we don’t pass the argument?
  8. То же, что 6.

Дополнительно 🌻

Аригато

Спасибо, что нашли время прочитать эту историю. Я попытался дать несколько хороших вопросов и объяснений. Пожалуйста, дайте мне знать, где это можно улучшить. Также я думаю о том, чтобы взять небольшие темы и создать короткие рассказы (2 минуты чтения), посвященные каждой из них. Что мне выбрать дальше?