TGViewer
lyoha.js lyoha.js @lyohajs · 269 subscribers
Post #114 889
Внезапно врываюсь с рубрикой TIL (today I learned).

Надеюсь, все знают про классы и Proxy в JS. И как бы с ними всё понятно, первое многие применяют довольно часто, а второе лично мне не доводилось трогать часто и подробно. Однако, сегодня я выяснил интересную (и, возможно, для кого-то очевидную) вещь: их можно очень интересно смешать.

Естественно, речь не о том, чтобы создать экземпляр класса и на него навесить proxy. Речь о том, чтобы возвращать proxy из конструктора!

Да, так можно. Да, будет работать. И наследование будет работать. И даже если в классе-наследнике будет свой конструктор - тоже будет работать. И будет перехватывать обращения ко всем свойствам и методам класса, изнутри и снаружи. И даже тайпскрипт разрешит вам это сделать: интерфейсы-то совпадают.

Что это позволяет делать? Ну, на самом деле, дофига всего. Самое банальное - геттеры и сеттеры без геттеров и сеттеров. Но вообще, использование ограничено только вашей фантазией.

В конце хотел написать, что каждый день что-то новое, но вспомнил, что не писал сюда уже почти год :) Так что просто порадуюсь очередной находке. Что думаете об этом?

UPD: Carbon поломал переносы строк в коде, но, думаю, смысл понятен :)
  • 👍 11
More from @lyohajs
  1. Aug 1, 2025TIL, что методы класса могут быть тайп-гардами для самого этого же класса. Даже не знаю, ч…
  2. Jun 3, 2025Post #120
  3. Feb 21, 2025Ответ на этот пост — грёбаные Proxy. Если в функцию ref передан объект (а экземпляр класса…
  4. Feb 21, 2025Помните, как раньше, в Vue 2, чтобы добавить на лету свойство объекта нужно было использов…
  5. Feb 11, 2025И снова TIL (today I learned). Вот есть у вас, допустим, класс, и вы хотите запретить его…
  6. Feb 5, 2024Кажется, я наконец-то готов поделиться тем, над чем работал с сентября. В последнее время…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →