Ключевое слово Javascript «это»

Итак, начнем с того, что ключевое слово this является одним из основных понятий, с которым должен быть знаком каждый разработчик Javascript. Сегодня я расскажу об этих концепциях в том виде, в каком я их изучил.

Ключевое слово это

этотjavascript ссылается на объект в контексте. Ну, там много жаргона! Проще говоря, это относится к подлежащему в предложении. Давайте разберемся на примере.

В приведенном выше фрагменте обе инструкции console.log дают один и тот же результат value1 value2, однако использование obj.param1, obj.param2 становится двусмысленным, поскольку obj может относиться к какой-то глобальной переменной. Использование this.param1, this.param2 говорит нам, что мы имеем в виду объект obj, в котором он определен. Ключевое слово this относится к объекту, к которому привязана функция.

этоосновы

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

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

этов глобальном масштабе

рассмотреть следующее

this в глобальной области видимости относится к объекту окна. (Если не включен строгий режим, иначе это не определено ). Функции и переменные, определенные в глобальной области видимости, привязаны к объекту окна, и, следовательно, this.param1 в строке 3 относится к глобально объявленному param1, что также является причиной, по которой мы можем вызывать window.method() в строке 14. method внутри объявления obj по-прежнему ссылается на obj, поэтому obj.method() возвращает value2 .

этосложная часть

это ключевое слово неправильно понимается в следующих четырех случаях:

  1. Когда мы заимствуем функцию/метод, использующий this.
  2. Когда мы назначаем метод, который использует this, переменной.
  3. Когда функция, имеющая this, передается обратно как обратный вызов.
  4. Когда this используется внутри замыкания (просто поместите функцию в функцию)

Давайте обсудим каждый из вышеперечисленных:

1.thisПри заимствовании функции

Метод avg в строке 15 будет ссылаться, а не ссылаться на объект ControllerA. Он скорее будет ссылаться на объект ControllerB, так как именно он вызывает метод.

Чтобы решить эту проблему, мы можем убедиться, что «это» внутри ControllerB.avg() относится к объекту ControllerA.

Ну, вышеперечисленное может быть достигнуто с помощью метода apply()

Строка-15 будет заменена на ControllerB.avg.apply(ControllerA,ControllerA.scores)

2.this, в то время как метод, имеющий this, назначается переменной

Здесь showData() в строке 15 выведет John 20, так как оно привязано к глобальной области видимости. Функция вызывается глобальной переменной showData, следовательно, вывод.

Чтобы исправить это, мы можем специально установить значение this с помощью метода bind()

Строка-14 будет переписана как var showData = user.showData.bind(user)

3.thisВнутри закрытия

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

В приведенном выше фрагменте оператор console.log() даст значения (Джон, не определено) (Джейн, не определено). Причина в том, что this в операторе консоли привязано к глобальной области видимости, поскольку не может получить this от своего родителя.

Чтобы исправить это, присвойте this переменной во внутренней функции (также известной как замыкание), как показано во фрагменте кода ниже

4.thisВнутри функции, переданной как обратный вызов

Здесь, в приведенном выше примере, callback не может получить доступ к this метода MyConstructor, поэтому по умолчанию используется глобальный this. Здесь предупреждение будет говорить undefined

Чтобы исправить описанное выше, назначьте это локальной переменной в методе MyConstructor.

Сводка

this (он же "контекст") — это специальное ключевое слово внутри каждой функции, и его значение зависит только от того, как была вызвана функция, а не от того, как/когда/где она была определена. На него не влияет лексическая область видимости, как на другие переменные.

Вышеизложенное было написано с намерением проанализировать мое собственное понимание темы.

Приветствуются любые предложения по улучшению статьи.

Ваше здоровье!