Chromeでテストした場合、これを行うのは単純な方法です。
NodeList.prototype.forEach = Array.prototype.forEach;
これは機能します。Webkit上。ただし、Firefoxにはありません。FFはHTMLCollectionを返すため...
私が見つけた最もクロスブラウザの方法:
NodeList.prototype.forEach = HTMLCollection.prototype.forEach = Array.prototype.forEach;
ただし、IE8以下では、ホストオブジェクトのプロトタイプにプロパティを追加するときにチョークするため、機能しません。
完全なリスト:
NodeList.prototype.forEach = HTMLCollection.prototype.forEach = Array.prototype.forEach;
NodeList.prototype.map = HTMLCollection.prototype.map = Array.prototype.map;
NodeList.prototype.filter = HTMLCollection.prototype.filter = Array.prototype.filter;
NodeList.prototype.reduce = HTMLCollection.prototype.reduce = Array.prototype.reduce;
NodeList.prototype.reduceRight = HTMLCollection.prototype.reduceRight = Array.prototype.reduceRight;
NodeList.prototype.every = HTMLCollection.prototype.every = Array.prototype.every;
NodeList.prototype.some = HTMLCollection.prototype.some = Array.prototype.some;
または、私たちの愛するベルギを喜ばせるために(そしてそれがよりきれいだから):
['forEach', 'map', 'filter', 'reduce', 'reduceRight', 'every', 'some'].forEach(
function(p) {
NodeList.prototype[p] = HTMLCollection.prototype[p] = Array.prototype[p];
});
パーフェクトキルへのリンクを考えると、それはほとんど無関係です。問題は、DOMが拡張されたときに、ブラウザーでほとんど同じように動作しないことです。この変更は、IE<=8を除くすべてのブラウザーで正常です。