В этом посте я собираюсь показать вам некоторые из будущих функций JavaScript, которые вы можете использовать сегодня. Наша фокус будет на языковых функциях, которые были изложены менее распространенными в 2020-е годы JS опрос.
Этот пост третий в серии, ориентированном на использование будущих функций JavaScript. Если вы хотите узнать больше о использовании новых функций синтаксиса или какие инструменты вам нужно будет начать использовать будущие функции JavaScript, я бы рекомендовал просмотреть предыдущие сообщения в этой серии.
Пожалуйста, будьте в курсе, если вы не прочитали первый пост в этой серии и хотите попробовать эти функции для себя, вам понадобится компилятор, как Babel. Для вашего удобства я встроенную игровую площадку встроенную коду со всеми примерами внизу этого поста.
Начиная
Во-первых, мы рассмотрим, как мы можем использовать Прокси В JavaScript для перехвата и изменения функциональности предопределенного объекта.
Во-вторых, мы собираемся посмотреть на декораторы И как их можно использовать для добавления дополнительных функций для методов и атрибутов классов.
Последнее, но не менее важное, мы рассмотрим насилил метод обещаний. Это позволит нам продолжать выполнение кода, как только мы получим ответ от каждого члена массива обещаний.
Давайте начнем с прокси.
Прокси
Функция прокси позволяет изменить функциональность существующего объекта, определяя новое поведение. Это требует двух параметров, цель
и обработчик.
-
цель
Параметр должен содержать объект, который мы хотим прокси. -
обработчик
Параметр должен содержать функцию, которая сообщает нашей системе, как мы должны обрабатыватьцель
объект. Вы можете использовать следующие функции обработчика для изменения цели.
Давайте начнем с примера кода:
const target = { message1: "hello", message2: "everyone" }; const handler = { get: function (target, prop, receiver) { if (prop === "message2") { return "world"; } } }; const proxy = new Proxy(target, handler); console.log(proxy.message1) // undefined console.log(proxy.message2) // "world"
Этот код определяет прокси
Переменная и рук это цель
Объект и обработчик
объект как его параметры. обработчик
Объект имеет одно свойство Получить
который ищет опора
названо «Message2» и если найдено, возвращает «мир».
Возможно, вы заметили, что когда мы получили доступ к атрибуту «Message1», мы возвращаем undefined. Это потому, что мы только сказали только Получить
Функция, чтобы вернуть что-то, если доступен «Message2».
Мы можем вернуть все другие свойства без изменений, используя глобальные Отражать
объект. Осмотрите измененный пример ниже:
const target = { message1: "hello", message2: "everyone" }; const handler = { get: function (target, prop, receiver) { if (prop === "message2") { return "world"; } return Reflect.get(...arguments); // <-- This is our addition } }; const proxy = new Proxy(target, handler); console.log(proxy.message1) // "hello" console.log(proxy.message2) // "world"
Теперь мы можем видеть, что наш прокси-объект возвращает исходное значение в Message1
атрибут.
Это прокси в двух словах. Есть еще много функций, доступных для нас, и я бы порекомендовал просмотреть официальные Документация на MDN Для более продвинутых примеров.
Декораторы
Декораторы – это функция JavaScript, позволяющая украсить существующую функциональность класса, добавив его дополнительную функциональность. Мы можем определить декораторы, используя @
префикс перед классом или его методами.
Babel Config
В настоящее время (по состоянию на февраль 2021 года – на момент написания этого поста), мне нужно было установить пару плагинов для Babel и обновить ее config для использования этой функции.
Давайте начнем с установки требуемых плагинов:
npm install @babel/plugin-proposal-decorators @babel/plugin-proposal-class-properties --save-dev
Далее мы можем обновить наше .babelrc
Конфигурация файла, чтобы включить эти новые плагины. Вот что мой выглядит как:
{ "presets": [ "@babel/env" ], "plugins": [ ["@babel/plugin-proposal-decorators", {"legacy": true}], ["@babel/plugin-proposal-class-properties", {"loose": true}] ], "parserOpts": { "plugins": [ "dynamicImport" ] } }
Как только эти плагины установлены, вы должны увидеть сообщения об ошибках в вашей IDE исчезнуть при использовании этой функции.
Пример
Взгляните на следующий пример демонстрации того, как мы можем добавить несколько простых, дополнительных функций в классе.
function setSomeProperty(target) { target.prototype.someProperty = "I am set by the decorator."; } @setSomeProperty class MyClass {} const test = new MyClass(); console.log(test.someProperty) // "I am set by the decorator"
В этом примере у нас есть простая функция, которая принимает целевой объект и добавляет его свойство. Мы также определили класс JavaScript без каких-либо методов или свойств. Этот класс имеет декоратор до его определения, который ссылается на нашу функцию.
Мы можем видеть, что когда мы регистрируем какая-то работа
На нашем Тест
Класс, мы были возвращены значение, которое мы устанавливаем в нашей функции.
Обещание.allSettled
С насилил
, мы можем гарантировать, что мы продолжим выполнение кода, когда все наши асинхронные функции завершили или не удалось.
Вот как это можно использовать:
const promise1 = Promise.resolve("FOO"); const promise2 = Promise.reject("BAR"); const promises = [promise1, promise2]; Promise.allSettled(promises).then((results) => { console.log(results[0]) // { status: 'fulfilled', value: 'FOO' } console.log(results[1]) // { status: 'rejected', reason: 'BAR' } })
Наш пример выше показывает возвращенный ответ от насилил
функция. Эта функция действительно входит в свою собственную, когда у вас есть более реалистичная асинхронная операция, которая возвращает ответ в разное время.
Если вы хотите узнать больше о обещаниях, я бы порекомендовал эту подробную статью по Джейк Арчибальд Отказ
Живой пример
Если вы хотите сыграть с этими функциями в прямом эфире, я создал кодовую песочницу для вас к клону и вмешательству с досугом. Это узловая песочница, которая использует консоль для регистрации вывода из всех примеров, которые вы видели в этом посте. Чтобы просмотреть эти журналы, вам может потребоваться запустить Пряжа начать
в консоли.
Следующий
Спасибо за чтение моего поста. Если вам понравилось, оставайся настроенными, так как в этой серии будет одна окончательная рассрочка в этой серии. Структуры данных являются темой учебника следующих недель. Я с нетерпением жду встречи с вами.
Оригинал: “https://dev.to/ianholden/future-javascript-use-new-language-features-today-3-4-language-3p42”