17

次の点に問題はありますか。

NodeList.prototype.forEach = Array.prototype.forEach;

通常forEachは単なる配列のプロパティですが、すべての s のプロパティとしても設定することで、 でノードをループする前にNodeLista を配列に変換する必要がなくなります。NodeListforEach

4

4 に答える 4

7

特に古いバージョンの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){ /* ... */ });

MDN:なぜforEachまたはmapを使用できないのかも参照してNodeListください。

于 2013-03-07T09:38:03.807 に答える
2

他の人が使用するライブラリに取り組んでいる場合、これを行うのは得策ではありません。

それがあなた自身のコード(つまりウェブサイト)であれば、大したことではないと思います。ただし、将来のブラウザーはNodeList.prototype.forEachネイティブでサポートするため、おそらくそれを保護する必要があります (Chrome は既にサポートしています)。

if (!NodeList.prototype.forEach) {
  NodeList.prototype.forEach = Array.prototype.forEach;
}
于 2016-08-28T14:38:35.083 に答える
0

ゼータが言ったように、便利な関数を使用する方が良いでしょう。ただし、このバージョンでは、コンテキストを与えることができます。

var forEach = function(list, callback, context){
  return Array.prototype.forEach.call(list, callback, context);
};
于 2013-12-03T17:17:41.007 に答える