Что такое прототип класса и зачем он нужен в TypeScript-декораторах нестатических методов?
Я думаю, этот вопрос быстро отметят как дупликат и перенаправят учить, что такое прототипы в JavaScript. Но в данном вопросе меня интересует именно прототип класса, а не прототипы в целом.
(TypeScript)-Декоратор принимает следующие параметры:
Функция конструктора класса для статического метода, либо прототип класса для обычного метода.
Название метода.
Объект интерфейса PropertyDescriptor
Допустим, у нас классы ProductController и CommentController унаследованы от Controller. Если к нестатическому методу ProductController или CommentController прикрепить декоратор и вывести в консоль первый параметр (обычно именуемый target), то будет лишь
Controller {}
Что это? Экспериментально я выяснил, что это не сам класс Controller: если добавить ему статическое поле, например public static testProperty: string = "OK";, а потом внутри декоратора вывести в консоль target.testProperty, то будет undefined. Также, у каждого наследника Controller {} свой. Поэтому мне совершенно не ясна суть того, что в консоли отображается как Controller {}.
Но отсюда вытекает ещё вопрос. Зачем нам в декораторе нестатического метода то, что называют прототип класса? Не имеющего опыта в создании собственных декораторов мне кажется, что он совершенно бесполезен. Чего хотелось бы, так это инстанс того класса, к которому принадлежит метод, чтобы совершить в этим инстансом манипуляции, но мне уже объяснили, что из декоратора доступа к инстансу нет.