มันแปลงdocument.querySelectorAll('a')
จาก a
NodeList
ไปเป็น array ปกติได้อย่างไร?
นี่คือรหัสที่เรามี
[].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
) และมีรายการอาร์กิวเมนต์ ie] อาร์กิวเมนต์start
ที่มี0
ขั้นตอนที่ 2: slice
เรียกใช้งานฟังก์ชันภายในcall
PS สำหรับการทำความเข้าใจที่ดีขึ้นของสถานการณ์ของเราขั้นตอนบางอย่างที่จำเป็นสำหรับบริบทของเราได้รับการปฏิเสธจากขั้นตอนวิธีการเดิมของการโทรและชิ้น
Array.prototype.slice.call(document.querySelectorAll('a'));
เป็นวิธีที่เหมาะสมในการเขียนโค้ดที่คุณเขียน