Как это конвертировать document.querySelectorAll('a')
из
NodeList
в обычный массив?
Это код, который у нас есть,
[].slice.call(document.querySelectorAll('a'), 0)
Давайте сначала разберем,
[] // Array object
.slice // Accessing the function 'slice' present in the prototype of Array
.call // Accessing the function 'call' present in the prototype of function object(slice)
(document.querySelectorAll('a'),0)
// 'call' can have arguments like, (thisArg, arg1,arg2...n).
// So here we are passing the 'thisArg' as an array like object,
// that is a 'nodeList'. It will be served as 'this' object inside of slice function.
// And finally setting 'start' argument of slice as '0' and leaving the 'end'
// argument as 'undefined'
Шаг: 1 Выполнение функции call
- Внутри
call
, кроме thisArg
, остальные аргументы
будет добавлен в список аргументов.
- Теперь функция
slice
будет вызываться связыванием значения this
как
thisArg
(массив как объект пришел из document.querySelector
) и со списком аргументов. т.е. аргумент start
, который содержит 0
Шаг: 2 Выполнение функции slice
, вызываемой внутри call
P.S. Для лучшего понимания нашего сценария некоторые шаги, необходимые для нашего контекста, были проигнорированы из исходного алгоритма call и slice .