为什么节点列表没有forEach?
我当时正在编写一个简短的脚本来更改<abbr>
元素的内部文本,但是发现它nodelist
没有forEach
方法。我知道那nodelist
不是继承自Array
,但似乎不是forEach
一种有用的方法吗?是否有一个具体的实施问题,我不知道阻止添加的forEach
到nodelist
?
注意:我知道Dojo和jQuery forEach
的节点列表都有某种形式。由于限制,我无法使用任何一个。
回答:
回答:
回答:
这些答案都不能解释 为什么 NodeList不继承自Array,从而允许它拥有forEach
其余所有内容。
答案在此es-discuss线程上找到。简而言之,它破坏了网络:
问题是代码错误地将instanceof假定为实例是与Array.prototype.concat结合使用的Array。
Google的Closure库中存在一个错误,由于该错误,几乎所有Google的应用程序都失败了。发现该库后立即对其进行了更新,但在那里可能仍然存在与concat结合使用时做出相同错误假设的代码。
也就是说,某些代码做了类似的事情
if (x instanceof Array) { otherArray.concat(x);
} else {
doSomethingElseWith(x);
}
但是,concat
将“实际”数组(不是Instanceof数组)与其他对象区别对待:
[1, 2, 3].concat([4, 5, 6]) // [1, 2, 3, 4, 5, 6][1, 2, 3].concat(4) // [1, 2, 3, 4]
因此,这意味着上面的代码在x
是NodeList的时候就中断了,因为在它沿着doSomethingElseWith(x)
路径行进之前,而之后沿着otherArray.concat(x)
路径行进,由于x
不是真正的数组,所以这样做很奇怪。
一段时间以来,有人提出了一个Elements
类的建议,该类是Array的真正子类,将被用作“新的NodeList”。但是,至少从现在起,它已从DOM标准中删除,因为由于各种技术和规范相关的原因,尚不可行。
以上是 为什么节点列表没有forEach? 的全部内容, 来源链接: utcz.com/qa/404165.html