为什么不在 2017 年将 Array.prototype 方法添加到 NodeList.prototype?

Why not add Array.prototype methods onto NodeList.prototype in 2017?

为什么(如果有的话)我应该避免这样做:

if (NodeList.prototype.map === undefined) {
    NodeList.prototype.map = Array.prototype.map
}

here 中的任何其他内容(我不是指 [].,我知道它很慢)

据我所知,这种行为在 Prototype 1.0 和 Mootools 时代很流行,并且被不顾后果地放弃使用,但由于浏览器之间的不一致而很快被贬低。

现在似乎工作正常,尤其是对于这种保守的使用。我们还应该避开吗?

因为,如果 NodeList 获得标准 map 方法,它会与您的冲突。

即使您检查当前方法是否存在,例如在分配替换之前检查原型是否成立 undefined,编写 Web 标准的人员也必须确保他们的更改不存在不要破坏我们的(意思是网络作者)的工作代码。向后兼容性是开放网络的核心原则之一;我们相信,如果我们今天编写代码并放置一周甚至几年,它应该仍然可以工作。

正是由于这个原因,Prototype 和 Mootools 成了问题;他们非常受欢迎,他们会毫不犹豫地修改他们认为合适的内置原型。

有没有想过为什么 .contains() 在字符串和数组上都被命名为不太熟悉的 .includes()?哦,是的,that was because Mootools had already defined .contains() and the new standard ended up breaking a significant number of existing web pages 通过定义不一致的实现。

TL;DR: 对于任何单个页面来说这可能无关紧要,但当被流行的库使用时它可能会成为一个大问题,因此人们往往会避免这种做法一共