此代码使用[].filter.call做什么? | 您所在的位置:网站首页 › input注解 › 此代码使用[].filter.call做什么? |
我正在学习Javascript,并尝试编写对列表进行排序的代码,如果满足某些条件,则将其删除。 我发现此片段似乎很有希望,但不知道它如何工作,因此我可以使其适应我的需求: list = document.getElementById("raffles-list").children; // Get a list of all open raffles on page list = [].filter.call(list, function(j) { if (j.getAttribute("style") === "") { return true; } else { return false; } });你们可以通过解释此代码块的功能来帮助我学习吗? 1> jropella..: 它获取“ raffles-list”元素的所有子元素,然后返回包含空“ style”属性的元素的过滤列表。 第一行是不言而喻的-它只是从id为“ raffles-list”的元素中检索孩子。 第二行稍微复杂一些。它利用了两点优势:[]是一个空数组,实际上只是一个具有各种方法/属性的对象,并且等号右侧的逻辑需要在“列表”之前求值。 ”获得新的价值。 使用空白数组以调用“过滤器”方法 告诉过滤器将list用作要过滤的数组,并使用function(j)进行过滤,其中j是要测试的列表中的项目 如果该项目的样式属性为空,即未应用任何样式,则返回true。 编辑:根据OP注释,[]。filter是一个原型,因此从本质上讲,一个对象具有与其他所有对象一样的各种属性。在这种情况下,过滤器是一种方法-请参见此处。通常,您仅指定执行测试的匿名函数/方法,但是此处的作者使用.call来指定任意对象来进行测试。看来这已经内置在标准过滤器方法中,所以我不知道他们为什么这样做。 list.filter无效,因为list是HTMLCollection而不是Array。因此它没有`filter`原型方法。这就是为什么需要创建空数组以便从Array原型中获取filter方法的原因。您无法删除“通话”部分,除非之前已将“ list”转换为“ Array”(例如,“ Array.from(list)” —并非所有浏览器都支持)。这个答案中带有“ [] .filter`是原型”的部分不是很清楚。过滤器是Array.prototype中的_prototype method_。`.call`不是特定于`filter`的。 |
CopyRight 2018-2019 实验室设备网 版权所有 |