猿问

JavaScript中[] .slice.call的解释?

我偶然发现了这个精巧的快捷方式,用于将DOM NodeList转换为常规数组,但是我必须承认,我不完全了解它的工作方式:


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

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


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


ABOUTYOU
浏览 774回答 3
3回答

慕田峪4524236

这里发生的事情是您调用slice()它的方式就像NodeList使用一样call()。slice()在这种情况下,要做的是创建一个空数组,然后遍历其运行的对象(最初是一个数组,现在是一个数组NodeList),并将该对象的元素附加到其创建的空数组中,最终将其返回。这是有关此的文章。编辑:因此,它以空数组[]开头,然后使用slice将调用结果转换为新数组,是吗?那是不对的。[].slice返回一个函数对象。函数对象具有一个函数call(),该函数调用将该函数分配给call()to 的第一个参数this;换句话说,使函数认为它是从参数(由NodeList返回的document.querySelectorAll('a'))而不是从数组中调用的。

江户川乱折腾

它是一种将类似数组的对象转换为实际数组的技术。其中一些对象包括:arguments 在功能上NodeList(请记住,它们的内容在获取后可能会更改!因此将它们转换为数组是冻结它们的一种方法)jQuery集合,又名jQuery对象(一些文档:API,type,learning)这有许多目的,例如,对象是通过引用传递的,而数组是通过值传递的。另外,请注意0,这里可以省略第一个参数,在此进行详细说明。为了完整起见,还有jQuery.makeArray()。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答