какое значение имеет this

Урок №121. Скрытый указатель *this

Обновл. 13 Сен 2021 |

Один из частых вопросов, которые новички задают по поводу классов: «При вызове метода класса, как C++ отслеживает то, какой объект его вызвал?». Ответ заключается в том, что C++ для этих целей использует скрытый указатель *this!

Скрытый указатель *this

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

Результат выполнения программы:

Возьмем, к примеру, следующую строку:

Хотя на первый взгляд кажется, что у нас здесь только один аргумент, но на самом деле у нас их два! Во время компиляции строка another.setNumber(4); конвертируется компилятором в следующее:

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

Но это только половина дела. Поскольку в вызове функции теперь есть два аргумента, то и метод нужно изменить соответствующим образом (чтобы он принимал два аргумента). Следовательно, следующий метод:

Конвертируется компилятором в:

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

Соединяем всё вместе:

Хорошей новостью является то, что это всё происходит скрыто от нас (программистов), и не имеет значения, помните ли вы, как это работает или нет. Всё, что вам нужно запомнить — все обычные методы класса имеют указатель *this, который указывает на объект, связанный с вызовом метода класса.

Указатель *this всегда указывает на текущий объект

Начинающие программисты иногда путают, сколько указателей *this существует. Каждый метод имеет в качестве параметра указатель *this, который указывает на адрес объекта, с которым в данный момент выполняется операция, например:

Источник

Многоликий this в JS

В этом посте я сделаю все возможное, чтобы объяснить одну из самых фундаментальных частей JavaScript: контекст выполнения. Если вы много используете JS-фреймворки, понимание «this» может сначала показаться приятным дополнением. Однако, если вы собираетесь серьезно относиться к программированию, понимание контекста абсолютно важно для того, чтобы быть JavaScript программистом.

Мы используем this во многом так же, как мы используем его на естественном языке. Мы предпочли бы написать «Моя мама посинела, это очень тревожно», вместо «Моя мама посинела. Становление моей мамы синей очень беспокоит». Зная контекст this, мы можем понять, что нас так беспокоит.

Попробуем соединить его с языком программирования. В JavaScript мы используем this как ярлык, ссылку. Он относится к объектам, переменным, и мы используем их в контексте.

Это очень тревожно, но не бойтесь. Через минуту все станет ясно.

Глобальный контекст

Что вы думаете, если кто-нибудь скажет: «Это очень тревожно»? Без какой-либо заметной причины, так же, как начало разговора, без контекста или введения. Скорее всего, вы начнете связывать это с чем-то вокруг или с последней ситуацией.

Это происходит в браузере постоянно. Сотни тысяч разработчиков используют this без контекста. Наш бедный браузер делает все возможное, чтобы соотнести this применительно к глобальному объекту, window в этом конкретном примере.

Вне любой функции в глобальном контексте выполнения this относится к глобальному контексту (объекту window).

Контекст функции

Чтобы снова обратиться к реальному примеру, контекст функции можно воспринимать как контекст предложения. «Моя мама посинела, это очень тревожно». Мы использовали this в предложении, поэтому мы знаем, что это значит, но мы можем использовать его и в разных предложениях. Например: «Ураган грядет, это очень тревожно». То же самое, но другой контекст и совершенно другое значение.

Контекст в JavaScript связан с объектами. Он ссылается на объект внутри выполняемой функции. this относится к объекту, в котором выполняется функция.

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

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

В строгом режиме (strict mode) правила разнятся. Контекст остается таким, каким он был установлен. В этом конкретном примере this не был определен, поэтому он остается undefined.

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

this является динамическим, то есть он может меняться от одного объекта к другому

Мы можем назвать фрукты this по имени объекта.

Итак, new изменяет правила. Оператор new создает экземпляр объекта. Контекст функции будет ссылаться на созданный экземпляр объекта.

Call, apply, bind

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

apply позволяет вызывать функцию с аргументами в виде массива, тогда как call требует, чтобы параметры были явно указаны.

Метод bind устанавливает постоянный контекст в требуемое значение.
После использования bind this неизменяемо даже при вызове call, apply или bind.

Стрелочные функции (ES6)

Стрелочные функции были введены как фича ES6. Их можно рассматривать как очень удобный инструмент. Однако, вы должны знать, что стрелочные функции работают иначе, чем обычные функции с точки зрения контекста. Посмотрим.

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

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

Стрелочная функция всегда имеет значение this и поэтому не может использоваться как конструктор. Этот последний пример иллюстрирует разницу.

Источник

В чем разница между this и that?

Нет времени? Сохрани в

Greetings, everyone! Сегодня поговорим об основах. Расскажем вам разницу между «this / that» и «these / those», поясним их значение, приведем наглядные примеры и украсим все это итоговой таблицей с разницей.

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

Содержание статьи:

какое значение имеет this

This и That

Основное отличие заключается в расстоянии объекта от говорящего.

Нужно использовать «this» [ðɪs] – этот / эта / это, когда объект близок к говорящему (он держит его в руках, например), и «that» [ðæt] – тот / та / то, когда он находится на расстоянии или вне поля зрения говорящего или слушателя.

This is my cat (pointing at a cat on my lap).
Это мой кот (указывая на него на своих коленях).

That is his dog (pointing at a dog beside some stranger on the street).
Та собака его (указывая на собаку рядом с незнакомцем на улице).

какое значение имеет this

Обратите внимание, что время будет также влиять на использование «this» и «that» в качестве показательного местоимения.

Если что-то случилось в прошлом, использование «that» будет более уместно. Хотя по-русски мы все равно говорим «это».

Можете, конечно, сказать и «то», но звучать это будет подозрительно странно. Нет необходимости в уточнении, чего не скажешь об английском.

He didn’t die yet. That made me think.
Он еще не умер. Это заставило меня задуматься.

С другой стороны, если событие еще не произошло, то подходящей формой будет «this».

She won’t go to church tomorrow. This is quite strange.
Она не пойдет в церковь завтра. Это довольно странно.

какое значение имеет this

Удивительно, что американцы, поднимая телефонную трубку, обычно говорят: «Who is this?», а англичане — «Who is that?».

Обычно мы используем «that», говоря о вещах, но не о людях или животных:

какое значение имеет this

Интерактивные игры на уроках английского

These и Those

«These» [ði:z] – эти — множественное число «this», а «those» [ðoʊz] – те — множественное число «that».

Точно так же, если вы говорите о вещах (людях), находящихся в непосредственной близости к говорящему, то нужно использовать «these», а если что-то (или кто-то) находится вдали, то «those».

Мы можем использовать «those», говоря о людях, животных или вещах.

There is a special swimming pool in the building. Those interested in water polo can enjoy our service.
В здании есть специальный плавательный бассейн. Те, кого интересует водное поло, могут наслаждаться нашей услугой.

какое значение имеет this

В формальном контексте, особенно в научной деятельности, говоря о сходстве чего-либо, мы используем «that of / those of» вместо «the one of / the ones of».

The proton has a similar mass to that of a neutron.
Протон имеет сходную массу с протоном нейтрона.

The emotions in the poems are those of loss and grief.
Эмоции в стихах отражают утрату и горе.

Как использовать эти местоимения

What’s in this bag?
That whisky tastes strange.
I might get myself a pair of those Nikes.

Come and look at this.
That’s a very bad idea.
Can I have one of these?

какое значение имеет this

Варианты употребления this и that

Эмоциональная дистанция

Иногда мы используем this, that, these и those для того, чтобы сослаться на то, что нас радует.

Например, можно употреблять «this/these», ссылаясь на то, что мы одобряем или к чему относимся положительно.

I love this new woolen smartphone cover that you can get.
Мне нравится этот новый шерстяной чехол для телефона, который ты можешь достать.

Используем «that/those» чтобы создать дистанцию.

What are you going to say to that friend of yours?
Что ты собираешься сказать тому своему дружку?

Используем «those», говоря о предметах внутри помещения, где мы были.

I didn’t like his house. It had those awful paintings.
Мне не понравился его дом. В нем были те ужасные картины.

Обмен знаниями и новая информация

Иногда мы используем «that» вместо «the», чтобы обратить внимание слушателя на что-то, поделиться своими знаниями или информацией.

Зачастую это происходит, когда мы рассказываем какую-нибудь историю или объясняем что-то.

You know that waterfall in the forest nearby? Well, they’re gonna privatize it.
Знаешь тот водопад в лесу рядом? Ну, они собираются его приватизировать.

какое значение имеет this

«This» иногда используется вместо «a/an», когда мы ссылаемся на что-то важное или недавно произошедшее, или когда представляем кому-то новую личность или вещь в своей истории.

This guy today knocked on the door and asked if I wanted to talk about God.
Этот парень постучал в дверь и спросил, не хочу ли поговорить о Боге.

Физическая близость и расстояние

Мы используем «this», и «these» чаще всего, указывая на вещи и людей, которые находятся на близком расстоянии к говорящему или пишущему, или на то, что происходит в данный момент.

Shall I use this knife here?
Мне стоит воспользоваться этим ножом?
I’ll post these letters on my way home.
Я закину эти письма на почту по дороге домой.

Мы используем «that» и «those», указывая на вещи и людей, которых нелегко определить в ситуации. Они часто находятся на расстоянии от говорящего, а иногда и ближе к слушателю.

What’s in that bottle over there?
Что это в той бутылке там?

какое значение имеет this

Иногда вещи не видны ни говорящему ни слушателю.

Death Star! That’s my favorite star!
Звезда Смерти! Это моя любимая звезда!

Полезные выражения и словосочетания

That’s it — восклицание при решении проблемы: «вот и все!»; в роли согласия: «да, правильно», «именно!», «во-во!», «и точка!; в роли конечной реплики в однозначном плане: «ну все!», «все, хватит!», «суши весла!»; вопросительное значение в плане «и это все?», «да ну?».

That’s it! I’m not putting up with any more of her rudeness!
Ну все! Я больше не буду терпеть ее грубость!
That’s it, it is working now.
Вот и все! Теперь это работает.

That’s alright (that’s ok) — оба выражения могут быть использованы для выражения прощения.

— Sorry, I didn’t mean to hurt you.
That’s ok.
— Извини, я не хотел тебя обидеть.
Все в порядке.

That’s right — один из самых популярных ответов в английском. Говорит о том, что вы согласны или подтверждаете чужие слова.

Переводы: именно так, верно, точно, абсолютно, вот-вот, так-то.

— You must be one lucky son of a b*tch, right?
— Ты должно быть везучий с*кин сын, да?
That’s right, I am. What?
Так точно. Что?

какое значение имеет this

this one time only (this once, just for once) – только 1 раз;
this one is still kicking – этот все еще жив;
this one is as good as any – этот не лучше любого другого;
this side of the Black Stump – по «эту сторону» (там, где вода, деревья, жизнь);
this said – при этом (притом что …), все сказанное означает, что … ;
this and that – то да се; печки-лавочки;
those against? – кто против?;
those abstaining – воздержавшиеся при голосовании;
those and that ones – те и те;
those are her days – по этим дням она принимает (гостей, например).
This one taken? – Тут занято/свободно?;
What’s all this/that about? – Это что ещё за новости!; Вот еще новости!;
This is it! – Вот оно!; Вот то, что я искал!; Это критический момент!; Хорошо!; Правильно!; В том-то и дело!

Таблица: Разница между this/these и that/those

This/TheseThat/Those
ЗначениеМестоимения и определяющее слово.Местоимения и определяющее слово.
Употребление1) С людьми и предметами возле говорящего или слушателя в единственном/множественном числе.

2) Для представления кого-либо.
Jane, this is Tom.

3) Говоря о близких временных периодах.
We are going to the USA this summer (this winter, this week, this year).

4) Cсылаясь на то, что будет происходить в будущем, на то, что еще не произошло, или на то, что мы собираемся сказать или сделать.
I don’t really like to say this, but the service here is awful.

5) Ссылаясь на что-то важное или недавно произошедшее, или когда представляем кому-то новую личность или вещь в своей
This guy today knocked on the door and asked if I wanted talk about God.

6) Говоря о вещах близких по времени или местонахождению к говорящему или происходящих в данный момент.
I love these long summer evenings. It’s so bright at 10 p.m. still.

7) Cсылаясь на то, что мы одобряем или к чему относимся положительно.
I love these new woolen smartphone covers that you can get.1) С людьми и предметами вдали от говорящего или слушателя в единственном/множественном числе.
Do you want to sit down on that bench over there?

2) Говоря о событиях в прошлом.
That dinner we had last night was gorgeous.

3) Говоря о том, что только что произошло.
What was that? Did you hear it?

4) Когда хотим обратить внимание слушателя на что-то, поделиться своими знаниями или информацией.
You know that old bookstore around the corner?

5) В формальном контексте, особенно в научной деятельности, говоря о сходстве чего-либо.
The proton has a similar mass to that of a neutron.

6) Говоря о предметах внутри помещения, где мы были.
I didn’t like his house. It had those awful paintings.

7) Чтобы создать ощущение расстояния.
I don’t like that/those new friend/friends of yours.

какое значение имеет this

Заключение

This/that — здесь & единственное число / там & единственное число.

These/those — здесь & множественное число / там & множественное число.

Надеемся, вы получили удовольствие и открыли для себя что-то новенькое. Ведь для этого мы здесь и пишем вам! Enjoy your correct English and aim for more!

Не забывайте, что можно записаться на бесплатный вводный урок английского по Скайпу!

EnglishDom #вдохновляемвыучить

Источник

this в JavaScript — что такое контекст

Теоретические основы

this — это ключевое слово в JavaScript которое содержит в себе объект (контекст) выполняемого кода.

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

this имеет различные значения в зависимости от того, где используется:

Что такое контекст?

Любое определение this, так или иначе крутится вокруг слова контекст. Давайте разберемся что же это такое.

JavaScript является однопоточным языком, то есть одновременно может выполняться только одна задача. Интерпретатор JavaScript всегда начинает выполнять код с глобального контекста (в браузере это объект window). С этого момента у самой первой вызванной функции контекстом будет глобальный объект (window). Наша функция может создать новый объект, создать в нем методы и запустить один из этих методов, теперь контекст вызова изменился и стал указывать на новый объект, который был создан из глобального контекста.

Таким образом, контекстом всегда является какой-то объект из под которого был вызван метод (функция).

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

Контекст — это всегда значение ключевого слова this, которое является ссылкой на объект, который запустил метод (функцию). Контекст — это объект «владеющий» исполняемым кодом. А this всегда ссылаться на объект (контекст) запустивший функцию.

Методы и функции

Это удобно, потому что:

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

Важно понять, что this не зависит от того где была объявлена функция, а зависит от того, как (кем) функция была вызвана. То где функция была объявлена имеет отношение к области её видимости (scope), а не к контексту.

Область видимости (scope) и Контекст

Кроме контекста нужно еще понимать что такое область видимости. Эти понятия часто путают. Называя одно другим. Однако контекст и область видимости это разные вещи.

this по умолчанию

Чаще всего this используется внутри функции/метода. Однако this также работает в глобальной области.

Запустим такой код в консоли браузера:

Как мы видим в обоих случаях this будет объектом Window. Это равносильно такому коду:

Т.е. в строгом режиме нужно прямо указывать контекст из которого вызывается метод:

this в методах

this очень легко отследить, когда метод вызывается в сочетании с объектом object.method() — что находится с левой стороны от точки, то и будет в this вызываемого метода (в данном случае this = object):

Это самый простой вариант чтобы понять что будет находится в this. Тут метод вызван из того же объекта в котором он определен. Поэтому this ссылается на экземпляр object потому что method вызывается этим объектом. this тут это вызывающий объект.

this в функции-конструктора

Когда для создания новых объектов используется функция, её нужно вызывать с помощью ключевого слова new. При таком вызове функция будет вызвана как конструктор нового объекта и новый объект будет возвращен.

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

Когда вызывается конструктор, this указывает на вновь созданный объект, а не на объект который запустил построение.

Заглянем под капот, чтобы лучше понять почему this в функции-конструктора работает именно так. Когда функция вызывается через new вызов этой функции происходит иначе:

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

Усложним: вызов функции внутри конструктора

Что будет если мы поместим обычную функцию внутрь функции-конструктора и вызовем её там?

А что, если мы создадим метод внутри конструктора и вызовем его в конструкторе при создании нового объекта?

get_this() по-прежнему указывает на вновь созданный объект. Потому что именно он его вызвал.

А что если, мы вызовем Doge без ключевого слова new?

Итого про this

Значение this устанавливается в зависимости от того, как вызвана функция:

При вызове функции в качестве метода, контекстом будет вызываемый объект:

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

При использовании ключевого слова new, создается новый чистый контекст.

Источник

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

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