Полифилл для метода сокращения
Вот пример полифилла для метода 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
для вызова исходной функции с указанным контекстом и аргументами.