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 call
fungsi
- Di dalam
call
, selain dari thisArg
, sisa argumen akan ditambahkan ke daftar argumen.
- Sekarang fungsi
slice
akan dipanggil dengan mengikat this
nilainya sebagai
thisArg
(array seperti objek berasal document.querySelector
) dan dengan daftar argumen. yaitu] argumen start
yang berisi0
Langkah: 2 Eksekusi slice
fungsi dipanggil dalamcall
start
akan ditugaskan ke variabel s
sebagai0
- karena
end
ini undefined
, this.length
akan 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
a
akan 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.