为什么不在 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: 对于任何单个页面来说这可能无关紧要,但当被流行的库使用时它可能会成为一个大问题,因此人们往往会避免这种做法一共
为什么(如果有的话)我应该避免这样做:
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: 对于任何单个页面来说这可能无关紧要,但当被流行的库使用时它可能会成为一个大问题,因此人们往往会避免这种做法一共