Попросить написать сниппет для функции polyfills — элементарный вопрос на любом собеседовании по JavaScript. Большинство людей пишут тела функций-полифиллов, расширяя родной объект-прототип. ИМХО, это антипаттерн. Хотя мы вряд ли поощряем написание полифилл-функций в производственном коде. Вместо этого мы используем множество служебных библиотек, таких как lodash.js или underscore.js и т. д. В любом случае, я решил написать статью, чтобы проиллюстрировать технику написания полифилла с соответствующими рассуждениями.

Что такое функция полифилла?

Полифилл — это фрагмент кода, используемый для обеспечения современных функций в старых браузерах, которые не поддерживают его изначально.

Различные подходы

Подход 1. Большинство людей пишут так, но я бы не рекомендовал следовать этому подходу.

У него есть некоторые опасения по поводу загрязнения прототипа:

  1. Что делать, если имя вашей пользовательской функции конфликтует с другими библиотеками, используемыми в приложении? Иногда это вызывает причудливые типы ошибок в коде.
  2. Всегда существует небольшая вероятность того, что имя функции конфликтует с зарезервированными ключевыми словами в Javascript для будущего использования. Такие случаи могут вызвать неизвестные проблемы.

Подход 2. Это хороший подход, но не такой стильный.

Функция defineProperty() позволяет лучше контролировать настройку области действия пользовательской функции полифиллов. Пожалуйста, обратитесь к статье MDN, чтобы понять другие его параметры.

Подход 3. Я рекомендую использовать этот чистый фрагмент, расширяя нативный объект. Однако любой может использовать как второй, так и третий подход.

Иногда мелочь имеет значение. Итак, следуйте и поощряйте других писать чистый код.