Полифилл для метода сокращения

Вот пример полифилла для метода Array.prototype.reduce the в JavaScript:

if (!Array.prototype.reduce) {
  Array.prototype.reduce = function(callback, initialValue) {
    let accumulator;
    let index = 0;
    if (initialValue === undefined) {
          accumulator = this[0];
          index = 1;
        } else {
          accumulator = initialValue;
        }
        for (index; index < this.length; index++) {
          accumulator = callback(accumulator, this[index], index, this);
        }
        return accumulator;
      };
}

Этот полифилл проверяет, существует ли уже метод reduce в файле Array.prototype. Если это не так, он определяет новую реализацию, которая эмулирует поведение собственного метода reduce. Реализация принимает функцию обратного вызова в качестве первого аргумента и необязательное начальное значение в качестве второго аргумента. Затем реализация перебирает элементы массива и накапливает значения с помощью функции обратного вызова. Окончательное значение возвращается как результат метода reduce.

Метод Polyfill для Bind

Вот пример полифилла для метода Function.prototype.bind в JavaScript:

if (!Function.prototype.bind) {
  Function.prototype.bind = function(context) {
    var args = Array.prototype.slice.call(arguments, 1);
    var self = this;
    return function() {
      var allArgs = args.concat(Array.prototype.slice.call(arguments));
      return self.apply(context, allArgs);
    };
  };
}

Этот полифилл проверяет, существует ли уже метод bind в файле Function.prototype. Если это не так, он определяет новую реализацию, которая эмулирует поведение собственного метода bind. Реализация принимает аргумент context, который является значением, которое будет привязано к this внутри функции. Реализация также позволяет передавать в функцию дополнительные аргументы, которые хранятся в массиве. Реализация возвращает новую функцию, которая при вызове использует apply для вызова исходной функции с указанным контекстом и аргументами.