Для чего необходимо ключевое слово this

Руководство по ключевому слову this Java

Узнайте, как использовать ключевое слово this в Java для ссылки на текущий объект.

1. введение

В этом уроке мы рассмотрим ключевое слово this Java.

Давайте рассмотрим, как и когда мы можем использовать это ключевое слово.

2. Устранение Неоднозначности Затенения Полей

Как мы видим здесь, мы используем this с полями name и age instance – чтобы отличить их от параметров.

3. Ссылки на конструкторы одного и того же класса

Наиболее распространенным вариантом использования является вызов конструктора по умолчанию из параметризованного конструктора:

Или мы можем вызвать параметризованный конструктор из конструктора без аргументов и передать некоторые аргументы:

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

4. Передача этого в качестве параметра

Здесь у нас есть print Instance() метод, в котором определено ключевое слово this |/аргумент:

5. Возврат этого

Мы также можем использовать это ключевое слово для возврата текущего экземпляра класса из метода.

6. Ключевое слово this Во Внутреннем классе

Мы также используем this для доступа к экземпляру внешнего класса из внутреннего класса:

Здесь, внутри конструктора, мы можем получить ссылку на экземпляр Keyword Test с помощью Keyword Test.this call . Мы можем пойти еще глубже и получить доступ к переменным экземпляра, таким как Ключевое слово Test.this.name поле.

7. Заключение

В этой статье мы исследовали ключевое слово this в Java.

Источник

Конструкторы, ключевое слово this, инициализаторы

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

ссылка = new имя_класса();

В частности, вот такой строчкой:

создавали объект класса Point:

В действительности, в момент создания объекта всегда происходит вызов специального метода (функции) класса, который называется конструктор:

Для чего необходимо ключевое слово this. Смотреть фото Для чего необходимо ключевое слово this. Смотреть картинку Для чего необходимо ключевое слово this. Картинка про Для чего необходимо ключевое слово this. Фото Для чего необходимо ключевое слово this

Но у нас в классе Point нет никаких методов, там объявлены только две переменные x, y. Все так, но в Java в любой класс автоматически добавляет конструктор по умолчанию, если явно не записаны никакие другие конструкторы. Именно этот конструктор по умолчанию и вызывался при создании объектов класса Point.

Чтобы все было понятнее, давайте объявим свой конструктор в этом классе. Для этого используется такой синтаксис:

имя_класса([аргументы]) <
// тело конструктора (набор операторов)
>

И в нашем случае его можно прописать так:

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

Так тоже можно делать. Теперь наш класс содержит оба конструктора и мы можем вызывать любой из них при создании объектов:

Это называется перегрузкой конструкторов, когда в одном классе несколько конструкторов с разными аргументами. На практике это используется довольно часто.

Ключевое слово this

Давайте теперь предположим, что во втором конструкторе имена аргументов называются также как и поля:

Очевидно, что здесь x, y будут восприниматься как локальные аргументы и никакого отношения к переменным класса x, y они не будут иметь. Но, можно ли как то явно указать, что мы хотим обратиться именно к полям объекта, а не к аргументам конструктора? Да, можно, и делается это с помощью специального ключевого слова this:

По смыслу this – это ссылка на текущий экземпляр объекта. То есть, если нам внутри самого объекта требуется оперировать ссылкой на него, то для этого используется ключевое слово this. Мало того, через this можно вызывать один конструктор из другого. Например, добавим в класс Point еще одно поле color – цвет точки. И будем по умолчанию инициализировать его нулем:

Смотрите что получается. У нас конструкторах происходит дублирование кода. Это плохой стиль программирования. Чтобы этого избежать, можно во втором конструкторе вызвать сначала первый для начальной инициализации полей, а затем, изменить значения координат x, y:

Вот эта строчка this(); как раз выполняет вызов первого конструктора перед изменением полей x, y. В результате, никакого дублирования не происходит. Вот так двояко можно применять ссылку this: и для доступа к полям текущего объекта, и для вызова конструкторов.

Инициализаторы

Давайте еще раз внимательно посмотрим на пример нашего класса и зададимся вопросом: что делает первый конструктор без аргументов? Фактически, он выполняет начальную инициализацию полей класса Point. Именно поэтому мы его отдельно вызываем во втором конструкторе. Но это не лучший ход. В классах языка Java можно создавать специальный блок, который так и называется – инициализатор. Он автоматически выполняется один раз при создании объекта до вызова конструкторов. Записывается инициализатор следующим образом:

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

Глядя на первый конструктор, в котором нет никакой реализации, возникает соблазн его попросту убрать из класса Point. Давайте попробуем это сделать и посмотрим к чему это приведет:

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

Подвиг 1. Объявить класс Rect для представления прямоугольника, в котором хранятся две координаты: верхнего левого и правого нижнего углов. Реализовать три конструктора: первый – без аргументов; второй с четырьмя аргументами для двух координат; третий – с четырьмя аргументами (координата левого верхнего угла, ширина и высота). Создать несколько экземпляров с вызовом разных конструкторов и выводом значений полей в консоль.

Подвиг 2. Объявить класс Triangle, хранящий три координаты вершин. Координаты представить в виде ссылок на класс Point, который рассмотрен на этом занятии. Реализовать два конструктора: без аргументов и с шестью аргументами (по два на каждую координату). Создать два объекта, вывести координаты вершин по каждому объекту в консоль.

Подвиг 3. Объявить класс Line для представления линии на плоскости, хранящий две координаты: начало и конец линии. Создать два объекта этого класса и в функции main() определить: пересекаются ли эти две линии.

Видео по теме

Для чего необходимо ключевое слово this. Смотреть фото Для чего необходимо ключевое слово this. Смотреть картинку Для чего необходимо ключевое слово this. Картинка про Для чего необходимо ключевое слово this. Фото Для чего необходимо ключевое слово this

#11 Концепция объектно-ориентированного программирования (ООП)

Для чего необходимо ключевое слово this. Смотреть фото Для чего необходимо ключевое слово this. Смотреть картинку Для чего необходимо ключевое слово this. Картинка про Для чего необходимо ключевое слово this. Фото Для чего необходимо ключевое слово this

#12 Классы и создание объектов классов

Для чего необходимо ключевое слово this. Смотреть фото Для чего необходимо ключевое слово this. Смотреть картинку Для чего необходимо ключевое слово this. Картинка про Для чего необходимо ключевое слово this. Фото Для чего необходимо ключевое слово this

#13 Конструкторы, ключевое слово this, инициализаторы

Для чего необходимо ключевое слово this. Смотреть фото Для чего необходимо ключевое слово this. Смотреть картинку Для чего необходимо ключевое слово this. Картинка про Для чего необходимо ключевое слово this. Фото Для чего необходимо ключевое слово this

#14 Методы класса, сеттеры и геттеры, public, private, protected

Для чего необходимо ключевое слово this. Смотреть фото Для чего необходимо ключевое слово this. Смотреть картинку Для чего необходимо ключевое слово this. Картинка про Для чего необходимо ключевое слово this. Фото Для чего необходимо ключевое слово this

#15 Пакеты, модификаторы конструкторов и классов

Для чего необходимо ключевое слово this. Смотреть фото Для чего необходимо ключевое слово this. Смотреть картинку Для чего необходимо ключевое слово this. Картинка про Для чего необходимо ключевое слово this. Фото Для чего необходимо ключевое слово this

#16 Ключевые слова static и final

Для чего необходимо ключевое слово this. Смотреть фото Для чего необходимо ключевое слово this. Смотреть картинку Для чего необходимо ключевое слово this. Картинка про Для чего необходимо ключевое слово this. Фото Для чего необходимо ключевое слово this

#17 Внутренние и вложенные классы

Для чего необходимо ключевое слово this. Смотреть фото Для чего необходимо ключевое слово this. Смотреть картинку Для чего необходимо ключевое слово this. Картинка про Для чего необходимо ключевое слово this. Фото Для чего необходимо ключевое слово this

#18 Как делается наследование классов

Для чего необходимо ключевое слово this. Смотреть фото Для чего необходимо ключевое слово this. Смотреть картинку Для чего необходимо ключевое слово this. Картинка про Для чего необходимо ключевое слово this. Фото Для чего необходимо ключевое слово this

#19 Ключевое слово super, оператор instanceof

Для чего необходимо ключевое слово this. Смотреть фото Для чего необходимо ключевое слово this. Смотреть картинку Для чего необходимо ключевое слово this. Картинка про Для чего необходимо ключевое слово this. Фото Для чего необходимо ключевое слово this

#20 Модификаторы private и protected, переопределение методов, полиморфизм

Для чего необходимо ключевое слово this. Смотреть фото Для чего необходимо ключевое слово this. Смотреть картинку Для чего необходимо ключевое слово this. Картинка про Для чего необходимо ключевое слово this. Фото Для чего необходимо ключевое слово this

#21 Абстрактные классы и методы

Для чего необходимо ключевое слово this. Смотреть фото Для чего необходимо ключевое слово this. Смотреть картинку Для чего необходимо ключевое слово this. Картинка про Для чего необходимо ключевое слово this. Фото Для чего необходимо ключевое слово this

Для чего необходимо ключевое слово this. Смотреть фото Для чего необходимо ключевое слово this. Смотреть картинку Для чего необходимо ключевое слово this. Картинка про Для чего необходимо ключевое слово this. Фото Для чего необходимо ключевое слово this

Для чего необходимо ключевое слово this. Смотреть фото Для чего необходимо ключевое слово this. Смотреть картинку Для чего необходимо ключевое слово this. Картинка про Для чего необходимо ключевое слово this. Фото Для чего необходимо ключевое слово this

#24 Анонимные внутренние классы

Для чего необходимо ключевое слово this. Смотреть фото Для чего необходимо ключевое слово this. Смотреть картинку Для чего необходимо ключевое слово this. Картинка про Для чего необходимо ключевое слово this. Фото Для чего необходимо ключевое слово this

#25 Перечисления (enum)

Для чего необходимо ключевое слово this. Смотреть фото Для чего необходимо ключевое слово this. Смотреть картинку Для чего необходимо ключевое слово this. Картинка про Для чего необходимо ключевое слово this. Фото Для чего необходимо ключевое слово this

#26 Обобщения классов (Generics)

Для чего необходимо ключевое слово this. Смотреть фото Для чего необходимо ключевое слово this. Смотреть картинку Для чего необходимо ключевое слово this. Картинка про Для чего необходимо ключевое слово this. Фото Для чего необходимо ключевое слово this

#27 Ограничения типов, метасимвольные аргументы, обобщенные методы и конструкторы

Для чего необходимо ключевое слово this. Смотреть фото Для чего необходимо ключевое слово this. Смотреть картинку Для чего необходимо ключевое слово this. Картинка про Для чего необходимо ключевое слово this. Фото Для чего необходимо ключевое слово this

#28 Обобщенные интерфейсы, наследование обобщенных классов

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

Источник

Java ключевое слово this, как работает?

Всем привет!
Просьба пояснить для начинающего

Я знаю разные ситуации в которых можно использовать ключевое слово this в Java. Но одно определение мне до сих пор непонятно «ссылка на текущий обьект», на какой текущий?
Что если в классе не создано обьектов?
И самое главное, что если в классе несколько обьектов?
Какой из них «текущий»?

Я читал в одной статье что при создании класса неявно создаётся обьект класса, именно this на него и ссылается. Но тогда слово this не может заменять обьект при вызове переменной обьекта, по типу object.variable тоже самое что this.variable, но как это возможно? Ведь this указывает на некий обьект который мы не создавали. Кароче это определение совсем не ясное «текущий обьект».

Простой 2 комментария

Для чего необходимо ключевое слово this. Смотреть фото Для чего необходимо ключевое слово this. Смотреть картинку Для чего необходимо ключевое слово this. Картинка про Для чего необходимо ключевое слово this. Фото Для чего необходимо ключевое слово this

Также не совсем понятно его использование (this и super) для вызова из одного конструктора другого, ни разу в жизни не пригодилось, и даже не могу представить ситуацию в которой такое может пригодится.

Для чего необходимо ключевое слово this. Смотреть фото Для чего необходимо ключевое слово this. Смотреть картинку Для чего необходимо ключевое слово this. Картинка про Для чего необходимо ключевое слово this. Фото Для чего необходимо ключевое слово this

Так вот. this в ЭКЗЕМПЛЯРЕ указывает НА ЭТОТ САМЫЙ экземпляр.

Для чего необходимо ключевое слово this. Смотреть фото Для чего необходимо ключевое слово this. Смотреть картинку Для чего необходимо ключевое слово this. Картинка про Для чего необходимо ключевое слово this. Фото Для чего необходимо ключевое слово this

Для чего необходимо ключевое слово this. Смотреть фото Для чего необходимо ключевое слово this. Смотреть картинку Для чего необходимо ключевое слово this. Картинка про Для чего необходимо ключевое слово this. Фото Для чего необходимо ключевое слово this

Для чего необходимо ключевое слово this. Смотреть фото Для чего необходимо ключевое слово this. Смотреть картинку Для чего необходимо ключевое слово this. Картинка про Для чего необходимо ключевое слово this. Фото Для чего необходимо ключевое слово this

Для чего необходимо ключевое слово this. Смотреть фото Для чего необходимо ключевое слово this. Смотреть картинку Для чего необходимо ключевое слово this. Картинка про Для чего необходимо ключевое слово this. Фото Для чего необходимо ключевое слово this

Для чего необходимо ключевое слово this. Смотреть фото Для чего необходимо ключевое слово this. Смотреть картинку Для чего необходимо ключевое слово this. Картинка про Для чего необходимо ключевое слово this. Фото Для чего необходимо ключевое слово this

е имеет смысла, если у класса 10000000 обьектов зданий,

Для чего необходимо ключевое слово this. Смотреть фото Для чего необходимо ключевое слово this. Смотреть картинку Для чего необходимо ключевое слово this. Картинка про Для чего необходимо ключевое слово this. Фото Для чего необходимо ключевое слово this

Для чего необходимо ключевое слово this. Смотреть фото Для чего необходимо ключевое слово this. Смотреть картинку Для чего необходимо ключевое слово this. Картинка про Для чего необходимо ключевое слово this. Фото Для чего необходимо ключевое слово this

Для чего необходимо ключевое слово this. Смотреть фото Для чего необходимо ключевое слово this. Смотреть картинку Для чего необходимо ключевое слово this. Картинка про Для чего необходимо ключевое слово this. Фото Для чего необходимо ключевое слово this

Для чего необходимо ключевое слово this. Смотреть фото Для чего необходимо ключевое слово this. Смотреть картинку Для чего необходимо ключевое слово this. Картинка про Для чего необходимо ключевое слово this. Фото Для чего необходимо ключевое слово this

Для чего необходимо ключевое слово this. Смотреть фото Для чего необходимо ключевое слово this. Смотреть картинку Для чего необходимо ключевое слово this. Картинка про Для чего необходимо ключевое слово this. Фото Для чего необходимо ключевое слово this

Для чего необходимо ключевое слово this. Смотреть фото Для чего необходимо ключевое слово this. Смотреть картинку Для чего необходимо ключевое слово this. Картинка про Для чего необходимо ключевое слово this. Фото Для чего необходимо ключевое слово this

Для чего необходимо ключевое слово this. Смотреть фото Для чего необходимо ключевое слово this. Смотреть картинку Для чего необходимо ключевое слово this. Картинка про Для чего необходимо ключевое слово this. Фото Для чего необходимо ключевое слово this

GavriKos, Вы не понимаете очём я, я не про поля класса, про поля класса всё понятно.
he various usage of keyword Java ‘THIS’ in Java is as per the below,

Для чего необходимо ключевое слово this. Смотреть фото Для чего необходимо ключевое слово this. Смотреть картинку Для чего необходимо ключевое слово this. Картинка про Для чего необходимо ключевое слово this. Фото Для чего необходимо ключевое слово this

Для чего необходимо ключевое слово this. Смотреть фото Для чего необходимо ключевое слово this. Смотреть картинку Для чего необходимо ключевое слово this. Картинка про Для чего необходимо ключевое слово this. Фото Для чего необходимо ключевое слово this

КОд не на джаве, но принцип тот же

Для чего необходимо ключевое слово this. Смотреть фото Для чего необходимо ключевое слово this. Смотреть картинку Для чего необходимо ключевое слово this. Картинка про Для чего необходимо ключевое слово this. Фото Для чего необходимо ключевое слово this

Для чего необходимо ключевое слово this. Смотреть фото Для чего необходимо ключевое слово this. Смотреть картинку Для чего необходимо ключевое слово this. Картинка про Для чего необходимо ключевое слово this. Фото Для чего необходимо ключевое слово this

Похоже тут никто из комментаторов понятия не имеют, как на самом деле работает их код.

Вы пишите такой код:

Компилятор же сгенерирует байткод, который примерно соответствует такому коду:

Так что по сути this это не обычное ключевое слово, это просто имя параметра в методе.

Для чего необходимо ключевое слово this. Смотреть фото Для чего необходимо ключевое слово this. Смотреть картинку Для чего необходимо ключевое слово this. Картинка про Для чего необходимо ключевое слово this. Фото Для чего необходимо ключевое слово this

Для чего необходимо ключевое слово this. Смотреть фото Для чего необходимо ключевое слово this. Смотреть картинку Для чего необходимо ключевое слово this. Картинка про Для чего необходимо ключевое слово this. Фото Для чего необходимо ключевое слово this

Для чего необходимо ключевое слово this. Смотреть фото Для чего необходимо ключевое слово this. Смотреть картинку Для чего необходимо ключевое слово this. Картинка про Для чего необходимо ключевое слово this. Фото Для чего необходимо ключевое слово this

Для чего необходимо ключевое слово this. Смотреть фото Для чего необходимо ключевое слово this. Смотреть картинку Для чего необходимо ключевое слово this. Картинка про Для чего необходимо ключевое слово this. Фото Для чего необходимо ключевое слово this

Для чего необходимо ключевое слово this. Смотреть фото Для чего необходимо ключевое слово this. Смотреть картинку Для чего необходимо ключевое слово this. Картинка про Для чего необходимо ключевое слово this. Фото Для чего необходимо ключевое слово this

Для чего необходимо ключевое слово this. Смотреть фото Для чего необходимо ключевое слово this. Смотреть картинку Для чего необходимо ключевое слово this. Картинка про Для чего необходимо ключевое слово this. Фото Для чего необходимо ключевое слово this

Артём Петренков,
he various usage of keyword Java ‘THIS’ in Java is as per the below,

Для чего необходимо ключевое слово this. Смотреть фото Для чего необходимо ключевое слово this. Смотреть картинку Для чего необходимо ключевое слово this. Картинка про Для чего необходимо ключевое слово this. Фото Для чего необходимо ключевое слово this

Если всеравно непонятно то могу набросать примером простеньких. Также рекомендую почитать
это и примеры тут

Обобщая выше сказанное(с нюансами):
— в java ВСЁ и ВСЕГДА это инстанс какого либо класса
— исходя из пункта выше ВСЕГДА на любой класс существует хотябы один инстанс
— исходя из пункта выше часто бывают случаи когда необходимо обратиться к переменной\методу родителя через super. Также возникают необходимости обратиться к методу\переменной именно этого конкретного инстанса или передать этот инстанс куда либо дальше не имея ссылки на этот инстанс.

Источник

О ключевом слове «this» языка JavaScript: особенности использования с пояснениями

Авторизуйтесь

О ключевом слове «this» языка JavaScript: особенности использования с пояснениями

Тайна this

Долгое время ключевое слово this оставалось для меня загадкой. Это мощный инструмент, но разобраться в нём нелегко.

С точки зрения Java, PHP или любого другого обычного языка this расценивается как экземпляр текущего объекта в методе класса, не больше и не меньше. Чаще всего его нельзя использовать вне метода, и этот подход не вызывает непонимания.

В JavaScript this — это текущий контекст исполнения функции. Поскольку функцию можно вызвать четырьмя способами:

и каждый из них определяет свой контекст, поведение this слегка не соответствует ожиданиям начинающих разработчиков. Кроме того, strict mode также влияет на контекст исполнения.

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

Прежде чем мы начнём, давайте познакомимся с несколькими терминами:

Содержание:

Вызов функции

Простой пример вызова функции:

this при вызове функции

this — это глобальный объект при вызове функции

В вызове функции контекстом исполнения является глобальный объект. Давайте проверим контекст следующей функции:

Когда this используется вне области видимости какой-либо функции (самая внешняя область видимости: контекст глобального исполнения), он также относится к глобальному объекту:

this при вызове функции в strict mode

this принимает значение undefined при вызове функции в strict mode

Пример функции, запущенной в strict mode:

Strict mode активен не только в текущей области видимости, но и во всех вложенных:

Один файл JavaScript может содержать как «строгие», так и «нестрогие» функции. Поэтому возможно иметь в одном скрипте разные контексты исполнения для одного типа вызова:

Ловушка: this во внутренней функции

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

Вообще-то контекст внутренней функции зависит только от вызова, а не от контекста внешней функции.

Следующий пример вычисляет сумму двух чисел:

Вызов метода

Метод — это функция, хранящаяся в объекте. Пример:

Вызов метода совершается, когда за выражением в виде аксессора, расценивающемся как объект функции, следует пара скобок и разделенный запятыми список аргументов между ними.

this при вызове метода

this — это объект, которому принадлежит метод

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

Давайте создадим объект, метод которого увеличивает число на 1:

Объект JavaScript наследует метод своего прототипа. Когда вызывается метод, унаследованный от объекта, контекстом всё равно является сам объект:

В синтаксисе ECMAScript 6 class контекст вызова метода — тоже сам объект:

Ловушка: отделение метода от его объекта

Метод объекта можно переместить в отдельную переменную. При вызове метода с использованием этой переменной вы можете подумать, что this — это объект, в котором определён метод.

Вызов конструктора

Начиная с ECMAScript 6, JavaScript позволяет определять конструкторы ключевым словом class :

Вызов конструктора создаёт новый пустой объект, наследующий свойства от прототипа конструктора. Ролью функции-конструктора является инициализация объекта. Как вы уже знаете, контекст этого типа вызова называется экземпляром. Это — тема следующей главы.

this в вызове конструктора

this — это только что созданный объект

Контекстом вызова конструктора является только что созданный объект. Он используется для инициализации объекта данными из аргументом функции-конструктора.

Давайте проверим контекст в следующем примере:

Ловушка: как не забыть про new

Некоторые функции JavaScript создают экземпляры при вызове не только в качестве конструктора, но и функции. Например, RegExp :

При исполнении new RegExp(‘\\w+’) и RegExp(‘\\w+’) JavaScript создаёт эквивалентные объекты регулярных выражений.

Следующий пример иллюстрирует проблему:

Тем не менее, this — это объект window при вызове функции, и Vehicle(‘Car’, 4) задаёт свойства объекта window — упс, что-то пошло не так. Новый объект не создан.

Непрямой вызов

Следующий пример демонстрирует непрямой вызов:

this при непрямом вызове

Ещё одним примером использования является создание иерархии классов в ES5 для вызова родительского конструктора:

Runner.call(this, name) в Rabbit создаёт непрямой вызов родительской функции для инициализации объекта.

Связанная функция

Следующий код создаёт связанную функцию и вызывает её:

this в связанной функции

Давайте посмотрим, как настроить this связанной функции:

Только вызов связанной функции как конструктора может изменить контекст, но это не рекомендуется (используйте нормальные функции).

В следующем примере сперва объявляется связанная функция, а затем производится попытка изменить контекст:

Стрелочная функция

Стрелочная функция нужна для более короткой формы объявления функции и лексического связывания контекста.

Её можно использовать следующим образом:

this в стрелочной функции

this — это контекст, в котором определена стрелочная функция

Стрелочная функция не создаёт свой контекст исполнения, а заимствует this из внешней функции, в которой она определена.

Следующий пример показывает прозрачность контекста:

Если стрелочная функция определена вне всех функций, её контекст — глобальный объект:

Стрелочная функция связывается с лексическим контекстом раз и навсегда. this нельзя изменить даже при помощи метод смены контекста:

Ловушка: определение метода стрелочной функцией

Вы можете захотеть использовать стрелочную функцию для объявления метода. Справедливо: их объявления гораздо короче по сравнению с обычным выражением: (param) => <. >вместо function(param) <..>.

В этом примере демонстрируется определение метода format() класса Period с использованием стрелочной функции:

Функциональное выражение решает проблему, поскольку обычная функция изменяет свой контекст в зависимости от вызова:

Заключение

а спрашивайте:

А в случае со стрелочной функцией спросите:

Каков this там, где объявлена стрелочная функция?

Такой подход к this убережет вас от лишней головной боли.

Источник

Ключевое слово this в JavaScript

Понятие «this»

This — это ключевое слово, используемое в JavaScript, которое имеет особое значение, зависящее от контекста в котором оно применяется.

Иначе, This — неявный объект контекста, доступный из кода, обеспечивающий возможность применения данного кода для разных объектов.

Так как объекты хранятся и копируются «по ссылке» (подробнее. ), переменная хранит не сам объект, а его «адрес в памяти», другими словами «ссылку» на него. Когда переменная объекта копируется – копируется ссылка, сам же объект не дублируется.

Итак, когда мы пользуемся ключевым словом this, то обращаемся с его помощью к некоему объекту, которым может являться:

This указывает на объект window

Ключевое слово this указывает на объект window:

В строгом режиме работы функции (‘use strict’) при запуске функции в глобальном окружении this равно undefined (а не window ).

This указывает на объект, внутри которого находится

Когда this используется внутри объекта, это ключевое слово ссылается на сам объект. Например, если обратиться к методу res объекта user, ключевое слово this ссылается на сам объект user :

Использование this во вложенных объектах

При использовании this во вложенных объектах необходимо помнить о том, что ключевое слово this относится к тому объекту, в методе которого оно используется. Рассмотрим пример.

Использование this в обычных функциях в строгом режиме ( ‘use strict’ )

В обычной функции this всегда представляет собой объект:

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *