Bagaimana cara mengonversi document.querySelectorAll('a')dari a
NodeList ke array biasa?
Ini adalah kode yang kami miliki,
[].slice.call(document.querySelectorAll('a'), 0)
Mari kita bongkar dulu,
[] // 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'
Langkah: 1 Eksekusi callfungsi
- Di dalam
call, selain dari thisArg, sisa argumen akan ditambahkan ke daftar argumen.
- Sekarang fungsi
sliceakan dipanggil dengan mengikat thisnilainya sebagai
thisArg(array seperti objek berasal document.querySelector) dan dengan daftar argumen. yaitu] argumen startyang berisi0
Langkah: 2 Eksekusi slicefungsi dipanggil dalamcall
startakan ditugaskan ke variabel ssebagai0
- karena
endini undefined, this.lengthakan disimpan die
- sebuah array kosong akan disimpan dalam sebuah variabel
a
Setelah membuat pengaturan di atas, iterasi berikut akan terjadi
while(s < e) {
a.push(this[s]);
s++;
}
- array yang terisi
aakan dikembalikan sebagai hasilnya.
PS Untuk memahami skenario kami dengan lebih baik, beberapa langkah yang diperlukan untuk konteks kami telah diabaikan dari algoritme panggilan dan slice yang asli .
Array.prototype.slice.call(document.querySelectorAll('a'));adalah cara yang tepat untuk menulis potongan kode yang Anda tulis.