为什么(如果完全)避免这样做:
if (NodeList.prototype.map === undefined) {
NodeList.prototype.map = Array.prototype.map
}
或其他任何东西(我不是指[].
,我知道这很慢)
现在似乎正常工作,尤其是对于如此保守的使用。我们还应该清除吗?
,因为,如果NodeList
曾经获得标准的map
方法,它将与您的冲突。
即使您检查当前方法是否存在,例如,通过检查原型是否在分配替换之前查看undefined
是否存在,编写Web标准的人也必须确保他们的更改不会破裂我们(含义Web作者)工作代码。向后兼容性是开放网络的核心原则之一。我们相信,如果我们今天编写代码并将其保留一周甚至几年,它仍然应该起作用。
原型和Mootools变得有问题。他们非常受欢迎,他们毫不犹豫地修改了合适的内置原型。
曾经想知道为什么.contains()
在两个字符串和数组上被命名为不熟悉的.includes()
?哦,是的,那是因为Mootools已经定义了.contains()
,而新标准最终通过定义不一致的实现来打破大量现有网页。
tl; dr:对任何一页都可能无关紧要,但是当受欢迎的库使用时,它可能会成为一个大问题,因此人们倾向于完全避免这种做法。