Как часто используются дескрипторы, декораторы и bind, call, apply?

Всем добрый вечер, читаю learn.javascript.ru, для более глубокого понимания js, сейчас читаю про темы дескрипторов, call bind apply и карринг, насколько это вообще востребовано в разработке реальных проектов? просто на практике за пол года встречал только bind и call, а в конструкторах всегда писали var self = this; и далее по книге сам автор описывает этот прием как более простой и понятный в разделе про ОПП в функциональном стиле.
  • Вопрос задан
  • 2145 просмотров
Пригласить эксперта
Ответы на вопрос 2
bingo347
@bingo347 Куратор тега JavaScript
Ищу Java и TypeScript разработчиков
Обо всем по порядку

Дескрипторы - так понимаю речь идет о дескрипторах свойств объекта. Вещь крайне полезная, позволяющая задать поведение свойству, сделав его не перечисляемым или, например, только для чтения, а так же можно задать функции getter/setter, которые будут вызываться при чтении/записи свойства. Используется довольно часто.

Декораторы функций. Позволяют избежать дублирования кода. Допустим, подключаете Вы некую библиотеку, в которой есть некоторая функция, Вам необходимая. Пусть она делает некое действие А, но Вам регулярно нужна последовательность действий А и Б. Тогда Вы пишите над этой функцией обертку, выполняющий эту последовательность, и уже вместо библиотечной функции + действие Б используете везде свою обертку. А вот если у Вас таких оберток с действием Б довольно много, то уже нужен декоратор, который позволит создавать такие обертки для любой функции. Используется как правило в крупных проектах, так как снижает вероятность ошибок.

bind - по сути является декоратором встроенным в язык. Позволяет привязать к функции контекст и начальные аргументы. Используется постоянно, особенно в случае передачи функции во внешний код.

call и apply позволяют вызвать функцию с нужным контекстом, разница в том что apply принимает 2 аргумента - контекст и массиво-подобный объект содержащий аргументы, а call принимает произвольное число аргументов: 1й - контекст, последующие передаются как аргументы функции. Используется постоянно.

Карринг. Хоть и используется не так часто, но бывает весьма полезным инструментом. По сути цепочки промисов построены на принципах карринга, только не функций, а объектов.

Ну и напоследок, конструкция var self = this; позволяющая сохранить контекст в замыкании уже потихоньку уходит в прошлое, благодаря стрелочным функциям из es2015
Ответ написан
Deodatuss
@Deodatuss
Лично по моему опыту, чаще всего использую bind (ну прям очень часто). Тот же call можно заменить на func.bind(this,args..)() или func.bind(this)(args). В apply еще не было нужды. var self = this использую когда вешаю dom события, потому что часто использую this как указатель на dom элемент на котором произошло событие (хотя конечно можно заменить на e.target). Как-то так.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы