为什么不在2017年将Array.protype方法添加到Nodelist.protype



为什么(如果完全)避免这样做:

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

或其他任何东西(我不是指[].,我知道这很慢)

据我所知,这种行为在原型1.0和Mootools时代很受欢迎,并且被鲁ck放弃,只是因为浏览器之间的不一致而迅速折旧。

现在似乎正常工作,尤其是对于如此保守的使用。我们还应该清除吗?

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

即使您检查当前方法是否存在,例如,通过检查原型是否在分配替换之前查看undefined是否存在,编写Web标准的人也必须确保他们的更改不会破裂我们(含义Web作者)工作代码。向后兼容性是开放网络的核心原则之一。我们相信,如果我们今天编写代码并将其保留一周甚至几年,它仍然应该起作用。

由于这个原因,

原型和Mootools变得有问题。他们非常受欢迎,他们毫不犹豫地修改了合适的内置原型。

曾经想知道为什么.contains()在两个字符串和数组上被命名为不熟悉的.includes()?哦,是的,那是因为Mootools已经定义了.contains(),而新标准最终通过定义不一致的实现来打破大量现有网页。

tl; dr:对任何一页都可能无关紧要,但是当受欢迎的库使用时,它可能会成为一个大问题,因此人们倾向于完全避免这种做法。

最新更新