मुख्य कंटेंट तक स्किप करें

Запрет на "this"

@serverSerrverlesskiy

Удаление ключевого🗝️ слова this из JavaScript делает язык👅 лучше!

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

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

Значение this называется контекстом вызова и будет определено в момент вызова функции. Например, такая функция, объявленная без объекта, вполне допустима:

functionsay Hi() {  console.log(this.firstName)}

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

Если одну и ту же функцию запускать в контексте разных объектов, она будет получать разный this:

var user = { firstName: 'Джони' }var admin = { firstName: 'Админ' }
function funcName() {  console.log(this.firstName)}user.f = funcNameadmin.g = funcName
//this равен объекту перед точкой:user.f() //Джониadmin.g() //Админadmin['g']() //Админ (доступ к объект реализован через квадратные скобки)

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

this и его недостатки#

Методы — это функции⚙️, которые хранятся в объектах. Для того, чтобы функция⚙️ знала, над каким объектом работать, используется this.

Poor

Но this теряет контекст во многих ситуациях (неизвестно возвращаемое🔄 значение):

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

Лучший язык#

The_best

JavaScript — это и функциональный язык программирования, и язык на основе прототипов. Если мы избавимся от this, у нас останется JavaScript как функциональный⚙️ язык👅 программирования. Это даже лучше!

В то же время, без this JavaScript предлагает 🆕 новый, уникальный способ выполнения объектно-ориентированного программирования без классов и наследования.

Отказ от this#

remember

Лучший способ избежать связанных с this проблем — вообще не использовать this!

JavaScript

JavaScript без this выглядит как лучший функциональный⚙️ язык👅 программирования!

Мы можем создавать🏗️ инкапсулированные объекты без использования this в качестве коллекций закрытий. С помощью React Hooks мы можем создавать🏗️ без this компоненты с сохранением состояния.

Ключевое слово this не может быть удалено из JavaScript, без разрушения всех существующих приложений. Однако что можно сделать? Мы можем написать 🖊️ собственный код без this и позволить его использовать только в библиотеках. Тем временем вводятся новые правила ESLint, запрещающие использование this.

Так как в прошлом уроке мы отказались от классов, то и вместе с ними прощаемся и с this.

Проблемы?#

Problem

Пишите в Discord или телеграмм чат, а также подписывайтесь на наши новости

Вопросы#

Question

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

  1. Объект, которому принадлежит метод
  2. Первый аргумент в функции
  3. Набор свойств

Можно ли обойтись без this:

  1. Можно, и лучше вообще не использовать
  2. Можно, но не целесообразно
  3. Нельзя, т.к. this не может быть удален из JavaScript

JavaScript без this выглядит как лучший:

  1. Функциональный язык программирования
  2. Процедурный язык программирования
  3. Логический язык программирования

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

Sumerian school

Ссылки#

  1. Статья "Удаление ключевого слова «this» из JavaScript делает язык лучше"
  2. Статья "Ключевое слово this в JavaScript"
  3. MDN web doc. Статья "this"

Contributors ✨#

Thanks goes to these wonderful people (emoji key):


Dmitriy K.

📖

Dmitriy Vasilev

💵

Resoner2005

🐛 🎨 🖋

Navernoss

🖋 🐛 🎨

Become a Patron!