素朴な方法は、あなたが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;
それとも、私たちの愛するBergiを喜ばせるために(そしてそれがクリーナーですので、また):
['forEach', 'map', 'filter', 'reduce', 'reduceRight', 'every', 'some'].forEach(
function(p) {
NodeList.prototype[p] = HTMLCollection.prototype[p] = Array.prototype[p];
});
がperfectionkillsへのリンクを考えると、それはそこにほとんど無関係です。問題は、DOMが拡張されたときにブラウザでほとんど同じように動作していないことです。この変更はIE < = 8を除くすべてのブラウザで正常です。
なぜ誰もが( '[]')代わりに 'Array.prototype.forEach'を使用しての配列を割り当てるのですか? –