次の点に問題はありますか。
NodeList.prototype.forEach = Array.prototype.forEach;
通常forEach
は単なる配列のプロパティですが、すべての s のプロパティとしても設定することで、 でノードをループする前にNodeList
a を配列に変換する必要がなくなります。NodeList
forEach
次の点に問題はありますか。
NodeList.prototype.forEach = Array.prototype.forEach;
通常forEach
は単なる配列のプロパティですが、すべての s のプロパティとしても設定することで、 でノードをループする前にNodeList
a を配列に変換する必要がなくなります。NodeList
forEach
特に古いバージョンのIE(記事)では、プロトタイプを使用してDOMの機能を拡張することはよくありません。
ただし、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){ /* ... */ });
他の人が使用するライブラリに取り組んでいる場合、これを行うのは得策ではありません。
それがあなた自身のコード(つまりウェブサイト)であれば、大したことではないと思います。ただし、将来のブラウザーはNodeList.prototype.forEach
ネイティブでサポートするため、おそらくそれを保護する必要があります (Chrome は既にサポートしています)。
if (!NodeList.prototype.forEach) {
NodeList.prototype.forEach = Array.prototype.forEach;
}
ゼータが言ったように、便利な関数を使用する方が良いでしょう。ただし、このバージョンでは、コンテキストを与えることができます。
var forEach = function(list, callback, context){
return Array.prototype.forEach.call(list, callback, context);
};