我偶然发现了将DOM NodeList转换为常规数组的简洁捷径,但我必须承认,我并不完全了解它的工作原理:
[].slice.call(document.querySelectorAll('a'), 0)
因此,它以一个空数组开头[],然后slice用于将结果转换call为新数组,是吗?
[]
slice
call
我不明白的是call。它如何document.querySelectorAll('a')从NodeList转换为常规数组?
document.querySelectorAll('a')
这里发生的是,您调用slice()它就像是NodeList使用的功能call()。slice()在这种情况下,要做的是创建一个空数组,然后遍历其运行的对象(最初是一个数组,现在是一个数组NodeList),并将该对象的元素附加到其创建的空数组中,最终将其返回。
slice()
NodeList
call()
编辑:
因此,它以空数组[]开头,然后使用slice将调用结果转换为新数组,是吗?
那是不对的。[].slice返回一个函数对象。函数对象具有一个函数call(),该函数调用将该函数分配给call()to 的第一个参数this;换句话说,让函数认为它是从参数(由NodeList返回的document.querySelectorAll('a'))而不是从数组中调用的。
[].slice
this