Что такое прототип класса и зачем он нужен в TypeScript-декораторах нестатических методов?

Я думаю, этот вопрос быстро отметят как дупликат и перенаправят учить, что такое прототипы в JavaScript. Но в данном вопросе меня интересует именно прототип класса, а не прототипы в целом.

(TypeScript)-Декоратор принимает следующие параметры:

  1. Функция конструктора класса для статического метода, либо прототип класса для обычного метода.

  2. Название метода.

  3. Объект интерфейса PropertyDescriptor

METANIT.COM

Допустим, у нас классы ProductController и CommentController унаследованы от Controller. Если к нестатическому методу ProductController или CommentController прикрепить декоратор и вывести в консоль первый параметр (обычно именуемый target), то будет лишь

Controller {}

Что это? Экспериментально я выяснил, что это не сам класс Controller: если добавить ему статическое поле, например public static testProperty: string = "OK";, а потом внутри декоратора вывести в консоль target.testProperty, то будет undefined. Также, у каждого наследника Controller {} свой. Поэтому мне совершенно не ясна суть того, что в консоли отображается как Controller {}.

Но отсюда вытекает ещё вопрос. Зачем нам в декораторе нестатического метода то, что называют прототип класса? Не имеющего опыта в создании собственных декораторов мне кажется, что он совершенно бесполезен. Чего хотелось бы, так это инстанс того класса, к которому принадлежит метод, чтобы совершить в этим инстансом манипуляции, но мне уже объяснили, что из декоратора доступа к инстансу нет.


Ответы (0 шт):