理解[].forEach.call()

本文介绍了如何利用JavaScript中的call方法使非数组对象调用数组方法forEach,通过具体实例解释了其工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

例子:
let cols = document.querySelectorAll('ul li')
[].forEach.call(cols, function (col, index) {
  // TODO
}

分析:
① []是一个空数组,无论这个数组里的最初值是什么,它们都不会被使用到;
② forEach方法是一个数组方法,只有数组才能调用;完整写法:Array.prototype.forEach,Array.forEach为简写;
③ call方法:
语法:fun.call(thisArg, arg1, arg2, ...)
参数:thisArg:在 fun 函数运行时指定的this值;arg1, arg2, ... : 指定的参数列表; 

综上: 
[]这个空数组里的值(当然,它没有值)是最初的this值,通过call方法,当这个空数组调用方法forEach时,cols里的值会取代空数组原先的this值。 
通俗的说,就是cols需要使用forEach这个方法,但是这个方法是一个数组方法,只有数组才能调用,于是通过call方法来了个偷梁换柱,在数组调用forEach方法的时候,将数组里的this值替换成了cols的值,达成了目的。

转载于:https://www.cnblogs.com/Man-Dream-Necessary/p/8205711.html

[root@iot-0013 bin]# ./kafka-consumer-groups.sh --bootstrap-server 172.25.1.120:9092,172.25.1.121:9092,172.25.1.133:9092 --command-config ./kafka-client-jaas.conf --describe --group test Error: Executing consumer group command failed due to org.apache.kafka.common.errors.TimeoutException: Timed out waiting for a node assignment. Call: describeGroups(api=FIND_COORDINATOR) java.util.concurrent.ExecutionException: org.apache.kafka.common.errors.TimeoutException: Timed out waiting for a node assignment. Call: describeGroups(api=FIND_COORDINATOR) at java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:357) at java.util.concurrent.CompletableFuture.get(CompletableFuture.java:1895) at org.apache.kafka.common.internals.KafkaFutureImpl.get(KafkaFutureImpl.java:165) at kafka.admin.ConsumerGroupCommand$ConsumerGroupService.$anonfun$describeConsumerGroups$1(ConsumerGroupCommand.scala:543) at scala.collection.TraversableLike.$anonfun$map$1(TraversableLike.scala:286) at scala.collection.Iterator.foreach(Iterator.scala:943) at scala.collection.Iterator.foreach$(Iterator.scala:943) at scala.collection.AbstractIterator.foreach(Iterator.scala:1431) at scala.collection.IterableLike.foreach(IterableLike.scala:74) at scala.collection.IterableLike.foreach$(IterableLike.scala:73) at scala.collection.AbstractIterable.foreach(Iterable.scala:56) at scala.collection.TraversableLike.map(TraversableLike.scala:286) at scala.collection.TraversableLike.map$(TraversableLike.scala:279) at scala.collection.AbstractTraversable.map(Traversable.scala:108) at kafka.admin.ConsumerGroupCommand$ConsumerGroupService.describeConsumerGroups(ConsumerGroupCommand.scala:542) at kafka.admin.ConsumerGroupCommand$ConsumerGroupService.collectGroupsOffsets(ConsumerGroupCommand.scala:558) at kafka.admin.ConsumerGroupCommand$ConsumerGroupService.describeGroups(Consum
03-12
@param dataType 0:获取表格数据,1:获取CSS选择器数据 @returns 比较结果数组 */ function compareStructuredSelector(cssSelector1, cssSelector2, dataType) { … if (!findSelectorString) { if (dataType) { var targetSelectorArray = targetSelectorString.split(‘>’); findSelectorString = targetSelectorArray.pop(); result = [targetSelectorArray.join(‘>’), findSelectorString]; } else { Array.prototype.forEach.call(document.querySelectorAll(targetSelectorString), function(el) { var trData = []; trData.push(getBoxText(el).join(‘\n’)); if (el.tagName === ‘A’) trData.push(el.href); var parentA = findFirstParentX(el, ‘a’); if (parentA && trData.indexOf(parentA.href) === -1) trData.push(parentA.href); if (trData.length > 0) result.push(trData); }); } } else { if (dataType) { var targetSelectorArray = targetSelectorString.split(‘>’); var tempFindSelectorString = targetSelectorArray.pop(); result = [targetSelectorArray.join(‘>’), tempFindSelectorString + ‘>’ + findSelectorString]; } else { Array.prototype.forEach.call(document.querySelectorAll(targetSelectorString), function(el) { Array.prototype.forEach.call(el.querySelectorAll(findSelectorString), function(item) { var trData = []; if (item.matches(targetSelectorString + ‘>’ + findSelectorString)) { trData.push(getBoxText(item).join(‘\n’)); if (item.tagName === ‘A’) trData.push(item.href); var parentA = findFirstParentX(item, ‘a’); if (parentA && trData.indexOf(parentA.href) === -1) trData.push(parentA.href); } if (trData.length > 0) result.push(trData); }); }); } } return result; }C#如何获取这段字符串函数内的函数名
03-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值