Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么不在2017年将Array.prototype方法添加到NodeList.prototype上?_Javascript_Dom_Libraries_Prototypal Inheritance - Fatal编程技术网

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

Javascript 为什么不在2017年将Array.prototype方法添加到NodeList.prototype上?,javascript,dom,libraries,prototypal-inheritance,Javascript,Dom,Libraries,Prototypal Inheritance,为什么(如果有的话)我应该避免这样做: if (NodeList.prototype.map === undefined) { NodeList.prototype.map = Array.prototype.map } 或者来自的任何其他内容(我不是指[]。,我知道它很慢) 据我所知,这种行为在Prototype 1.0和Mootools时代很流行,被肆无忌惮地使用,但由于浏览器之间的不一致,很快就被贬低了 现在似乎很好用,尤其是对于这种保守的用法。我们还应该避开吗?因为,如果节点列

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

if (NodeList.prototype.map === undefined) {
    NodeList.prototype.map = Array.prototype.map
}
或者来自的任何其他内容(我不是指
[]。
,我知道它很慢)

据我所知,这种行为在Prototype 1.0和Mootools时代很流行,被肆无忌惮地使用,但由于浏览器之间的不一致,很快就被贬低了


现在似乎很好用,尤其是对于这种保守的用法。我们还应该避开吗?

因为,如果
节点列表
获得标准的
映射
方法,它将与您的方法冲突

即使您检查当前方法是否存在,例如,在指定替换之前检查原型是否持有
未定义的
,编写web标准的人员也必须确保其更改不会破坏我们(即web作者)的工作代码。向后兼容性是开放web的核心原则之一;我们相信,如果我们今天编写代码并将其保留一周甚至几年,它应该仍然可以工作

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

有没有想过为什么字符串和数组上的
.contains()
被命名为不太熟悉的
.includes()
?哦,是的,通过定义一个不一致的实现

TL;DR:这可能对任何一个页面都不重要,但在一个流行的图书馆使用时,它可能会成为一个大问题,因此人们倾向于完全避免这种做法