¿Cómo se convierte eso document.querySelectorAll('a')
de una
NodeList
a una matriz regular?
Este es el código que tenemos,
[].slice.call(document.querySelectorAll('a'), 0)
Vamos a desmontarlo primero
[] // 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'
Paso: 1 Ejecución de la call
función
- Dentro
call
, aparte del thisArg
, el resto de los argumentos se agregarán a una lista de argumentos.
- Ahora
slice
se invocará la función al vincular su this
valor como
thisArg
(matriz de la que proviene el objeto document.querySelector
) y con la lista de argumentos. es decir] argumento start
que contiene0
Paso: 2 Ejecución de la slice
función invocada dentro decall
start
será asignado a una variable s
como0
- desde
end
es undefined
, this.length
serán almacenados ene
- una matriz vacía se almacenará en una variable
a
Después de realizar la configuración anterior, se realizará la siguiente iteración
while(s < e) {
a.push(this[s]);
s++;
}
- la matriz llena
a
se devolverá como resultado.
PD Para una mejor comprensión de nuestro escenario, algunos pasos que son necesarios para nuestro contexto han sido ignorados del algoritmo original de llamada y corte .
Array.prototype.slice.call(document.querySelectorAll('a'));
es una forma adecuada de escribir el fragmento de código que escribió.