您是否发现以下方面存在任何问题:
NodeList.prototype.forEach = Array.prototype.forEach;通常,forEach只是数组的一个属性,但是通过将它也设置为所有NodeList的属性,在使用forEach遍历其节点之前,不需要将NodeList转换为数组。
发布于 2013-03-07 17:38:04
通过原型扩展DOM的功能通常不是一个好主意,尤其是在旧版本的IE (article)中。
但是,即使不将其添加到原型链或将NodeList转换为数组,您也可以简单地使用Array.prototype.forEach:
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){ /* ... */ });发布于 2016-08-28 22:38:35
如果你正在开发一个将被其他人使用的库,那么这样做并不是一个好主意。
如果这只是你自己的代码(即..一个网站),那么我想这没什么大不了的。不过,你可能应该保护它,因为在未来,浏览器将原生支持NodeList.prototype.forEach (Chrome已经支持)。
if (!NodeList.prototype.forEach) {
NodeList.prototype.forEach = Array.prototype.forEach;
}发布于 2013-12-04 01:17:41
正如Zeta提到的,最好使用一个方便的函数。然而,这个版本将允许您为其提供上下文。
var forEach = function(list, callback, context){
return Array.prototype.forEach.call(list, callback, context);
};https://stackoverflow.com/questions/15267295
复制相似问题