Внезапно врываюсь с рубрикой TIL (today I learned).
Надеюсь, все знают про классы и Proxy в JS. И как бы с ними всё понятно, первое многие применяют довольно часто, а второе лично мне не доводилось трогать часто и подробно. Однако, сегодня я выяснил интересную (и, возможно, для кого-то очевидную) вещь: их можно очень интересно смешать.
Естественно, речь не о том, чтобы создать экземпляр класса и на него навесить proxy. Речь о том, чтобы возвращать proxy из конструктора!
Да, так можно. Да, будет работать. И наследование будет работать. И даже если в классе-наследнике будет свой конструктор - тоже будет работать. И будет перехватывать обращения ко всем свойствам и методам класса, изнутри и снаружи. И даже тайпскрипт разрешит вам это сделать: интерфейсы-то совпадают.
Что это позволяет делать? Ну, на самом деле, дофига всего. Самое банальное - геттеры и сеттеры без геттеров и сеттеров. Но вообще, использование ограничено только вашей фантазией.
В конце хотел написать, что каждый день что-то новое, но вспомнил, что не писал сюда уже почти год :) Так что просто порадуюсь очередной находке. Что думаете об этом?
UPD: Carbon поломал переносы строк в коде, но, думаю, смысл понятен :)
Post #114
889

- 👍 11