Как преобразующих document.querySelectorAll('a')
из NodeList
в обычный массив?
Это код, который мы имеем,
[].slice.call(document.querySelectorAll('a'), 0)
Lets демонтировать первый,
[] // 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.
'Array.prototype.slice.call (документ .querySelectorAll ('a')); 'является правильным способом написать кусок кода, который вы написали. – user544262772