STARTPOINT_DEV Telegram 9
Разбираемся с потерей контекста this в JavaScript! 🔍

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

📝 Рассмотрим пример:

function show() {
console.log(this);
}

const obj = {show: show};
obj.show();

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

Так, базово можно сказать, что this – это объект «перед точкой». Если при вызове функции что-то есть перед точкой, то это “что-то” будет доступно как this внутри этой функции.

🔄 Но что происходит, если вызовем функцию не как метод объекта?

const showAgain = obj.show;
showAgain(); // this потерян, в консоль выведется undefined или глобальный объект

Здесь this теряется, потому что мы вызываем функцию show не через объект, а напрямую. “Чего-то перед точкой” больше нет, и наш this будет потерян.

Сложный случай с setTimeout:

setTimeout(obj.show, 1000);

Хотя кажется, что show все еще метод объекта obj, контекст теряется. Это происходит потому, что setTimeout вызывает функцию show как обычную функцию, а не как метод объекта.

Мы можем немного развернуть данную запись, если попробуем описать функцию setTimout:

function setTimout(handler, timeout) {
// что-то происходит
// ...
// и наконец где-то вызывается handler
handler();
// ...
}

Таким образом наш переданный метод obj.show будет вызываться где-то внутри setTimout как handler, без “чего-то” перед точкой, а значит потеряет свой контекст.

📖 Чтение по теме:
Почему это происходит:
- Понимаем ссылочные типы
Обсуждения и подробности this:
- Методы объекта и контекст 'this'
- Habr: Детально о this
- TheCode: Как работает this в JavaScript
🔥4



tgoop.com/startpoint_dev/9
Create:
Last Update:

Разбираемся с потерей контекста this в JavaScript! 🔍

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

📝 Рассмотрим пример:


function show() {
console.log(this);
}

const obj = {show: show};
obj.show();

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

Так, базово можно сказать, что this – это объект «перед точкой». Если при вызове функции что-то есть перед точкой, то это “что-то” будет доступно как this внутри этой функции.

🔄 Но что происходит, если вызовем функцию не как метод объекта?

const showAgain = obj.show;
showAgain(); // this потерян, в консоль выведется undefined или глобальный объект

Здесь this теряется, потому что мы вызываем функцию show не через объект, а напрямую. “Чего-то перед точкой” больше нет, и наш this будет потерян.

Сложный случай с setTimeout:

setTimeout(obj.show, 1000);

Хотя кажется, что show все еще метод объекта obj, контекст теряется. Это происходит потому, что setTimeout вызывает функцию show как обычную функцию, а не как метод объекта.

Мы можем немного развернуть данную запись, если попробуем описать функцию setTimout:

function setTimout(handler, timeout) {
// что-то происходит
// ...
// и наконец где-то вызывается handler
handler();
// ...
}

Таким образом наш переданный метод obj.show будет вызываться где-то внутри setTimout как handler, без “чего-то” перед точкой, а значит потеряет свой контекст.

📖 Чтение по теме:
Почему это происходит:
- Понимаем ссылочные типы
Обсуждения и подробности this:
- Методы объекта и контекст 'this'
- Habr: Детально о this
- TheCode: Как работает this в JavaScript

BY Настя Котова // Frontend & Node.js


Share with your friend now:
tgoop.com/startpoint_dev/9

View MORE
Open in Telegram


Telegram News

Date: |

Judge Hui described Ng as inciting others to “commit a massacre” with three posts teaching people to make “toxic chlorine gas bombs,” target police stations, police quarters and the city’s metro stations. This offence was “rather serious,” the court said. 5Telegram Channel avatar size/dimensions Those being doxxed include outgoing Chief Executive Carrie Lam Cheng Yuet-ngor, Chung and police assistant commissioner Joe Chan Tung, who heads police's cyber security and technology crime bureau. A vandalised bank during the 2019 protest. File photo: May James/HKFP. A few years ago, you had to use a special bot to run a poll on Telegram. Now you can easily do that yourself in two clicks. Hit the Menu icon and select “Create Poll.” Write your question and add up to 10 options. Running polls is a powerful strategy for getting feedback from your audience. If you’re considering the possibility of modifying your channel in any way, be sure to ask your subscribers’ opinions first.
from us


Telegram Настя Котова // Frontend & Node.js
FROM American