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;
}