Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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 NodeList.prototype.forEach=Array.prototype.forEach;_Javascript_Arrays_Foreach_Nodelist - Fatal编程技术网

Javascript NodeList.prototype.forEach=Array.prototype.forEach;

Javascript NodeList.prototype.forEach=Array.prototype.forEach;,javascript,arrays,foreach,nodelist,Javascript,Arrays,Foreach,Nodelist,您是否发现以下方面存在任何问题: NodeList.prototype.forEach = Array.prototype.forEach; 通常情况下,forEach只是数组的一个属性,但是通过将其设置为所有NodeList的属性,在使用forEach循环通过其节点之前,不需要将NodeList转换为数组,通过原型扩展DOM的功能通常不是一个好主意,尤其是在旧版本的IE()中 但是,您可以简单地使用Array.prototype.forEach,即使不将其添加到原型链或将NodeList转换

您是否发现以下方面存在任何问题:

NodeList.prototype.forEach = Array.prototype.forEach;

通常情况下,
forEach
只是数组的一个属性,但是通过将其设置为所有
NodeList
的属性,在使用
forEach
循环通过其节点之前,不需要将
NodeList
转换为数组,通过原型扩展DOM的功能通常不是一个好主意,尤其是在旧版本的IE()中

但是,您可以简单地使用
Array.prototype.forEach
,即使不将其添加到原型链或将
NodeList
转换为数组:

var list = document.querySelectorAll(".some.query");
Array.prototype.forEach.call(list, function(el){ /* ... */ });

/* or */
var forEach = function(ctn, callback){
    return Array.prototype.forEach.call(ctn, callback);
}
forEach(list, function(el){ /* ... */ });

另请参见MDN:。

正如Zeta所提到的,最好使用方便的功能。但是,此版本允许您为其提供上下文

var forEach = function(list, callback, context){
  return Array.prototype.forEach.call(list, callback, context);
};

如果你正在开发一个供其他人使用的库,那么这样做不是一个好主意

如果它只是你自己的代码(即一个网站),那么我想这没什么大不了的。不过,您可能应该保护它,因为在未来的浏览器中,浏览器将在本地支持
NodeList.prototype.forEach
(Chrome已经支持了)


NodeList.prototype.forEach()
现在在大多数浏览器中都可用:

浏览器兼容性表:

我喜欢这个主意。。如果其他人指出其中的任何问题,请等待。如果没有旧版本的IE,那么JS的许多功能都可以很好地工作。为什么要使用
Array.prototype.forEach.call(
…而不是
Array.prototype.forEach(…
在MDN的语法中,它说你可以在第二个参数中定义
这个
。我只是想提高我的理解。@MuhammadUmer:请不要在评论中提问。如果我不再活跃于StackOverflow,你将永远得不到答案。也就是说,
这个参数
这个
的值
callback
,而不是在
Array.prototype.forEach
期间。问题被问到了,谢谢你的时间……如果你想解释更多,请做……不幸的是,这种方法对XML文档的节点不起作用,即通过
XMLHttpRequest
检索或使用jQuery
$.get(“/test.XML”,函数(xmlDocument)检索{Array.prototype.forEach.call(xmlDocument.childNodes,function(node){…};})
。但是,来自的解决方案工作良好:
Array.from(xmlDocument.childNodes).forEach(function(node){…});
。对于DOM文档的节点,它工作良好:
NodeList.prototype.forEach=Array.prototype.forEach;document.childNodes.forEach(function(节点){…};
.ffv45,chromev53。
if (!NodeList.prototype.forEach) {
  NodeList.prototype.forEach = Array.prototype.forEach;
}