Як це перетворюється 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
PS Для кращого розуміння нашого сценарію деякі етапи, необхідні для нашого контексту, були ігноровані з оригінального алгоритму виклику та фрагменту .
Array.prototype.slice.call(document.querySelectorAll('a'));
це правильний спосіб написання фрагмента коду, який ви написали.