Как написать полифилл для привязки
По сути, Polyfill - это поддержка методов, которых не было в нашем старом браузере. Я объясню, как написать собственную реализацию связывания, которая будет поддерживаться повсюду. Вот пример использования исходного метода привязки:
Во фрагменте кода метод привязки - это, по сути, метод прототипа, доступный для всех функций. Первый аргумент bind - это ссылка на объект, к которому можно получить доступ в вызывающей функции через ключевое слово this
. Как только мы передадим info
в качестве первого аргумента bind, свойства info
будут доступны как this
ключевое слово внутри функции printInfo
.
Шаги по созданию собственных реализаций mybind
.
Шаг 1: мы создадим функцию-прототип внутри Function prototypes. Причина создания его в качестве функции-прототипа заключается в том, что к нему нужно обращаться в каждой функции, такой как bind
method.
Вы заметите, что строка 2 возвращает другую функцию. Поскольку в исходном методе привязки он возвращает функцию.
Шаг 2. Необходимо вернуть ссылку на вызывающую функцию. Это означает, что функция, вызывающая mybind
, должна быть возвращена, и ее первый аргумент должен быть ссылкой на объект.
В этом фрагменте кода вы заметите, что mybind
метод принимает ссылку на объект refObject
, который передается в качестве первого аргумента вызывающей функции. Кроме того, нам нужно иметь ссылку на вызывающую функцию, которая установлена в строке 2, для этого мы устанавливаем ссылку this
на переменную fn
Шаг 3. Мы почти подошли к завершению, так как основной скелет готов. На следующем шаге нам нужно будет учесть аргументы, которые передаются функции (например, city
). Этого можно добиться с помощью следующего фрагмента кода.
В вызывающей функции мы передаем остальные аргументы, которые передаются в функцию mybind
. Мы почти закончили с реализацией.
Подождите, нам все еще нужно приспособить еще один набор аргументов, которые передаются в ссылочную функцию (i-e country
). В первом фрагменте кода вы заметите, что мы вызываем callMethod('Malaysia')
.
Шаг 4 (последний): другой набор аргументов можно передать ссылочной функции.
В этом фрагменте кода мы включили args2
в строку 3, чтобы мы могли передать его вызывающей функции. Кроме того, в строке 4 мы изменились с call
на apply
. Поскольку нам нужно передавать аргументы в виде объединенного списка, а apply
method действительно имеет это условие для передачи аргументов в виде списка.
Наконец, мы закончили с нашей пользовательской mybind
function. В нашем исходном (первом) фрагменте кода, если мы заменим bind
на mybind
, вы получите те же результаты.
Спасибо, что прочитали эту статью. Это помогло мне понять концепции call
, apply
, bind
методов javascript. Надеюсь, ты чему-нибудь научился.