小编典典

用JavaScript解释[] .slice.call?

javascript

我偶然发现了将DOM NodeList转换为常规数组的简洁捷径,但我必须承认,我并不完全了解它的工作原理:

[].slice.call(document.querySelectorAll('a'), 0)

因此,它以一个空数组开头[],然后slice用于将结果转换call为新数组,是吗?

我不明白的是call。它如何document.querySelectorAll('a')从NodeList转换为常规数组?


阅读 233

收藏
2020-05-01

共1个答案

小编典典

这里发生的是,您调用slice()它就像是NodeList使用的功能call()slice()在这种情况下,要做的是创建一个空数组,然后遍历其运行的对象(最初是一个数组,现在是一个数组NodeList),并将该对象的元素附加到其创建的空数组中,最终将其返回。

编辑:

因此,它以空数组[]开头,然后使用slice将调用结果转换为新数组,是吗?

那是不对的。[].slice返回一个函数对象。函数对象具有一个函数call(),该函数调用将该函数分配给call()to
的第一个参数this;换句话说,让函数认为它是从参数(由NodeList返回的document.querySelectorAll('a'))而不是从数组中调用的。

2020-05-01