Рубрики
Без рубрики

Будущий JavaScript – используйте новые языковые функции сегодня (3/4 – язык)

В этом посте я собираюсь показать вам некоторые из будущих функций JavaScript, которые вы можете использовать сегодня. O… Теги с JavaScript, учебником, WebDev.

В этом посте я собираюсь показать вам некоторые из будущих функций 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”