Что такое Proxy и как его использовать ?
Объект Proxy «оборачивается» вокруг другого объекта и может перехватывать (и, при желании, самостоятельно обрабатывать) разные действия с ним, например чтение/запись свойств и другие. Далее мы будем называть такие объекты «прокси».
Прокси используются во многих библиотеках и некоторых браузерных фреймворках. В этой главе мы увидим много случаев применения прокси в решении реальных задач.
Для большинства действий с объектами в спецификации JavaScript есть так называемый «внутренний метод», который на самом низком уровне описывает, как его выполнять. Например, [[Get]] – внутренний метод для чтения свойства, [[Set]] – для записи свойства, и так далее. Эти методы используются только в спецификации, мы не можем обратиться напрямую к ним по имени.
Объект Proxy «оборачивается» вокруг другого объекта и может перехватывать (и, при желании, самостоятельно обрабатывать) разные действия с ним, например чтение/запись свойств и другие. Далее мы будем называть такие объекты «прокси».
Прокси используются во многих библиотеках и некоторых браузерных фреймворках. В этой главе мы увидим много случаев применения прокси в решении реальных задач.
Для большинства действий с объектами в спецификации JavaScript есть так называемый «внутренний метод», который на самом низком уровне описывает, как его выполнять. Например, [[Get]] – внутренний метод для чтения свойства, [[Set]] – для записи свойства, и так далее. Эти методы используются только в спецификации, мы не можем обратиться напрямую к ним по имени.
👍7
В каком порядке и почему будут вызваны логи в консоль ?
Первые операции это те которые сразу же исполняются в колл стеке, дальше идут микрозадачи ( Promise ), после этого идут уже макрозадачи ( setTimeout, setInterval ).
Изначально после парсинга код попадает в стек. Асинхронный код проходит обработку в веб апи, после этого задача попадает в очередь задач ( там задачи распределяются в очереди между макро и микрозадачами ), после того как задачи в стеке не осталось, задачи из очереди задач идут в стек, там либо окончательно исполняются либо если задача опять асинхронная, то она проходит этот круг заново пока окончательно не исполнится
Первые операции это те которые сразу же исполняются в колл стеке, дальше идут микрозадачи ( Promise ), после этого идут уже макрозадачи ( setTimeout, setInterval ).
Изначально после парсинга код попадает в стек. Асинхронный код проходит обработку в веб апи, после этого задача попадает в очередь задач ( там задачи распределяются в очереди между макро и микрозадачами ), после того как задачи в стеке не осталось, задачи из очереди задач идут в стек, там либо окончательно исполняются либо если задача опять асинхронная, то она проходит этот круг заново пока окончательно не исполнится
👍6
Упаковка и Распаковка (Boxing) в JS что это такое ?
Методы – это свойства объектов, в которые записаны функции. Если это так, тогда почему работает такой код: 'hexlet'.toUpperCase();
Из этого кода можно сделать ошибочный вывод что строка это тоже объект, но это не так. В JavaScript строки, логические значения, null и числа реализованы как примитивные значения, у них нет методов. С другой стороны, для каждого такого типа существует собственный конструктор, "упаковывающий" примитивный тип в объект
JavaScript автоматически упаковывает примитивные типы в соответствующие объекты, когда встречает вызовы методов на них (и затем автоматически распаковывает). То есть в действительности, все методы которые мы вызываем на строках, хранятся в прототипе конструктора String. То же самое касается и всех остальных типов
Интересно то, как происходит распаковка. Для этого JavaScript автоматически вызывает метод valueOf() у объекта:
Методы – это свойства объектов, в которые записаны функции. Если это так, тогда почему работает такой код: 'hexlet'.toUpperCase();
Из этого кода можно сделать ошибочный вывод что строка это тоже объект, но это не так. В JavaScript строки, логические значения, null и числа реализованы как примитивные значения, у них нет методов. С другой стороны, для каждого такого типа существует собственный конструктор, "упаковывающий" примитивный тип в объект
JavaScript автоматически упаковывает примитивные типы в соответствующие объекты, когда встречает вызовы методов на них (и затем автоматически распаковывает). То есть в действительности, все методы которые мы вызываем на строках, хранятся в прототипе конструктора String. То же самое касается и всех остальных типов
Интересно то, как происходит распаковка. Для этого JavaScript автоматически вызывает метод valueOf() у объекта:
👍8
Как мы можем использовать Symbol с практической точки зрения ?
Symbol.toPrimitive - Определяет свойство с функциональным значением, вызываемое для преобразования объекта в соответствующее примитивное значение. Полезен и относится к теме Упаковки и Распаковки
Symbol.iterator - Хорошо известный символ указывает итератор по умолчанию для объекта.
Symbol.search - Хорошо известный символ указывает метод, который возвращает индекс в строке, соответствующей регулярному выражению. Эта функция вызывается методом String.prototype.search
Symbol.toPrimitive - Определяет свойство с функциональным значением, вызываемое для преобразования объекта в соответствующее примитивное значение. Полезен и относится к теме Упаковки и Распаковки
Symbol.iterator - Хорошо известный символ указывает итератор по умолчанию для объекта.
Symbol.search - Хорошо известный символ указывает метод, который возвращает индекс в строке, соответствующей регулярному выражению. Эта функция вызывается методом String.prototype.search
👍5
Что такое и как использовать Promise ?
Интерфейс Promise (промис) представляет собой обёртку для значения, неизвестного на момент создания промиса. Он позволяет обрабатывать результаты асинхронных операций так, как если бы они были синхронными: вместо конечного результата асинхронного метода возвращается своего рода обещание (дословный перевод слова "промис") получить результат в некоторый момент в будущем.
Promise может находиться в трёх состояниях: ожидание (pending), исполнено (fulfilled), отклонено (rejected)
Promise.all() - возвращает промис, который выполнится тогда, когда будут выполнены все промисы, переданные в виде перечисляемого аргумента, или отклонено любое из переданных промисов.
Promise.allSettled() - возвращает промис, который исполняется когда все полученные промисы завершены
Promise.race() - возвращает выполненный или отклонённый первый промис
Promise.any() - Как только один из промисов (Promise) выполнится успешно
Интерфейс Promise (промис) представляет собой обёртку для значения, неизвестного на момент создания промиса. Он позволяет обрабатывать результаты асинхронных операций так, как если бы они были синхронными: вместо конечного результата асинхронного метода возвращается своего рода обещание (дословный перевод слова "промис") получить результат в некоторый момент в будущем.
Promise может находиться в трёх состояниях: ожидание (pending), исполнено (fulfilled), отклонено (rejected)
Promise.all() - возвращает промис, который выполнится тогда, когда будут выполнены все промисы, переданные в виде перечисляемого аргумента, или отклонено любое из переданных промисов.
Promise.allSettled() - возвращает промис, который исполняется когда все полученные промисы завершены
Promise.race() - возвращает выполненный или отклонённый первый промис
Promise.any() - Как только один из промисов (Promise) выполнится успешно
👍7
Что такое генератор ?
Генератор - это функция способная хранить свое состояние, то есть способная останавливаться и заново запускаться
Для объявления генератора используется специальная синтаксическая конструкция: function*, которая называется «функция-генератор».
Основным методом генератора является next(). При вызове он запускает выполнение кода до ближайшей инструкции yield <значение> (значение может отсутствовать, в этом случае оно предполагается равным undefined). По достижении yield выполнение функции приостанавливается, а соответствующее значение – возвращается во внешний код:
Результатом метода next() всегда является объект с двумя свойствами: value, done
Методы:
Generator.prototype.next() - Возвращает значение, полученное выражением yield
Generator.prototype.return() - Возвращает заданное значение и заканчивает генератор
Generator.prototype.throw() - Выдаёт ошибку генератора.
Генератор - это функция способная хранить свое состояние, то есть способная останавливаться и заново запускаться
Для объявления генератора используется специальная синтаксическая конструкция: function*, которая называется «функция-генератор».
Основным методом генератора является next(). При вызове он запускает выполнение кода до ближайшей инструкции yield <значение> (значение может отсутствовать, в этом случае оно предполагается равным undefined). По достижении yield выполнение функции приостанавливается, а соответствующее значение – возвращается во внешний код:
Результатом метода next() всегда является объект с двумя свойствами: value, done
Методы:
Generator.prototype.next() - Возвращает значение, полученное выражением yield
Generator.prototype.return() - Возвращает заданное значение и заканчивает генератор
Generator.prototype.throw() - Выдаёт ошибку генератора.
👍6
Что такое каррирование ?
Каррирование – продвинутая техника для работы с функциями. Она используется не только в JavaScript, но и в других языках.
Каррирование – это трансформация функций таким образом, чтобы они принимали аргументы не как f(a, b, c), а как f(a)(b)(c).
Каррирование не вызывает функцию. Оно просто трансформирует её.
Каррирование либо уменьшение арности функции
Каррирование – продвинутая техника для работы с функциями. Она используется не только в JavaScript, но и в других языках.
Каррирование – это трансформация функций таким образом, чтобы они принимали аргументы не как f(a, b, c), а как f(a)(b)(c).
Каррирование не вызывает функцию. Оно просто трансформирует её.
Каррирование либо уменьшение арности функции
👍4
Стрелочные функции и контекст
Контекст - это объект в контексте которого выполняется функция.
Стрелочная функция в отличии от обычной не имеет своего контекста, она берет контекст на уровень выше.
Контекст можно привязать методами: call, apply, bind
Привязка контекста не работает со стрелочными функциями
Контекст - это объект в контексте которого выполняется функция.
Стрелочная функция в отличии от обычной не имеет своего контекста, она берет контекст на уровень выше.
Контекст можно привязать методами: call, apply, bind
Привязка контекста не работает со стрелочными функциями
👍3🤔1
Что такое IIFE и как эти пользоваться ?
Immediately-invoked function expressions (аббревиатура IIFE), что означает функцию, запускаемую сразу после объявления.
Это не то, что мы должны использовать сегодня, но, так как вы можете встретить это в старых скриптах, полезно понимать принцип работы.
Здесь создаётся и немедленно вызывается Function Expression. Так что код выполняется сразу же и у него есть свои локальные переменные.
Immediately-invoked function expressions (аббревиатура IIFE), что означает функцию, запускаемую сразу после объявления.
Это не то, что мы должны использовать сегодня, но, так как вы можете встретить это в старых скриптах, полезно понимать принцип работы.
Здесь создаётся и немедленно вызывается Function Expression. Так что код выполняется сразу же и у него есть свои локальные переменные.
👍4
Давайте знакомиться !
Меня зовут Кирилл.
Я автор этого канала и создатель бота @interviewITBot
Являюсь Senior Full-Stack разработчиком.
Сейчас работаю Тех Лидом в одной из Питерских компаний.
Вот мой тик ток где я создаю свой React за 15 секунд
Меня зовут Кирилл.
Я автор этого канала и создатель бота @interviewITBot
Являюсь Senior Full-Stack разработчиком.
Сейчас работаю Тех Лидом в одной из Питерских компаний.
Вот мой тик ток где я создаю свой React за 15 секунд
👍4