gpt4 book ai didi

javascript - 为什么要使用 Array.prototype.forEach.call(array, cb) 而不是 array.forEach(cb)?

转载 作者:数据小太阳 更新时间:2023-10-29 05:57:47 26 4
gpt4 key购买 nike

我刚刚查看了今年 ng-europe session 的一些照片,并注意到一张幻灯片,我认为它可能显示了即将推出的 Angular 2 的一些代码。请参见此处:

Example from ng-europe

(来源:https://plus.google.com/u/0/photos/+ThierryLAU/albums/6073085583895256529/6073092865671487010?pid=6073092865671487010&oid=105910465983441810901)

我不明白的是:

为什么此代码的作者使用 Array.prototype.forEach.call(array, cb) 而不是较短且(在我看来)等效的版本 array.forEach( cb)。我能想到的唯一原因是性能影响。

有人知道另一个区别吗?或者我对性能的猜测是否正确?

最佳答案

有数量Array-like objects看起来像数组,但不是。举几个例子:

  • 参数
  • childrenchildNodes 集合
  • document.getElementsByClassNamedocument.querySelectorAll 等方法返回的 NodeList 集合
  • jQuery 集合
  • 甚至字符串。

许多数组原型(prototype)方法都是通用的,这意味着它们的内部实现不依赖于上下文 thisArray 构造函数的实例。这允许在“看起来”像数组的其他 对象的上下文中调用这些方法。也就是说,看起来像一个数组意味着该对象具有数字键和长度属性。

这是一个无用的示例,说明如何在自定义类数组对象上调用 Array.prototype.join:

Array.prototype.join.call({0: 'one', 1: 'two', length: 2}, ' ');

上面会输出字符串"one two"。但是提供的对象显然不是数组。

关于javascript - 为什么要使用 Array.prototype.forEach.call(array, cb) 而不是 array.forEach(cb)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26546352/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com