为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

ABOUTYOU 2019-11-21 14:24:17
我偶然发现了这个精巧的快捷方式,用于将DOM NodeList转换为常规数组,但是我必须承认,我不完全了解它的工作方式:[].slice.call(document.querySelectorAll('a'), 0)因此,它以一个空数组开头[],然后slice用于将结果转换call为新数组,是吗?我不明白的是call。它如何document.querySelectorAll('a')从NodeList转换为常规数组?
查看完整描述

3 回答

?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

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


编辑:


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


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


查看完整回答
反对 回复 2019-11-21
?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

它是一种将类似数组的对象转换为实际数组的技术。


其中一些对象包括:


arguments 在功能上

NodeList(请记住,它们的内容在获取后可能会更改!因此将它们转换为数组是冻结它们的一种方法)

jQuery集合,又名jQuery对象(一些文档:API,type,learning)

这有许多目的,例如,对象是通过引用传递的,而数组是通过值传递的。


另外,请注意0,这里可以省略第一个参数,在此进行详细说明。


为了完整起见,还有jQuery.makeArray()。


查看完整回答
反对 回复 2019-11-21
  • 3 回答
  • 0 关注
  • 726 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信