2013-03-07 6 views
14

次の問題を参照してください:通常NodeList.prototype.forEach = Array.prototype.forEach;

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

forEachは、配列のちょうど性質であるが、同様にすべてのNodeList秒のプロパティとして設定することで、ANにNodeListを変換する必要はありません配列の前にノードをループすることができます。forEach

+0

私はこのアイデアが気に入っています。他の人が問題を指摘しているのを待っています。 –

+0

[NodeList.js](https://github.com/eorroe/NodeList.js)をチェックしてください –

答えて

7

DOMの機能をプロトタイプ、特にIEの古いバージョン(article)で拡張することは、しばしば良い考えではありません。

しかし、あなたは単にさえプロトタイプチェーンに追加するか、配列にあなたのNodeListを変換せずにArray.prototype.forEachを使用することができます。Why can't I use forEach or map on a 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も参照してください。

+0

JSの機能は非常に多く、完全にうまくいきます。 – Alnitak

+0

なぜ、Array.prototype.forEach.call( '... Array.prototype.forEach(...')の代わりに、MDNの構文で2番目のパラメータで 'this'を定義できると言いますか?https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach私は理解を深めようとしています。 –

+0

@MuhammadUmer:コメントで質問しないでください。つまり、 'thisArg'は'コールバック中の 'this'の値、' Array.prototype.forEach'中の__not__は返されません。 – Zeta

0

ゼータが述べたように、便利機能を使用する方がよいでしょう。しかし、このバージョンでは、コンテキストを与えることができます。

var forEach = function(list, callback, context){ 
    return Array.prototype.forEach.call(list, callback, context); 
}; 
1

他の人が使用するライブラリで作業している場合は、これを行うことはお勧めできません。

あなた自身のコード(つまり、ウェブサイト)の場合、大きな問題ではないと思います。今後のブラウザではネイティブにNodeList.prototype.forEach(Chromeは既に対応している)をサポートする予定であるため、おそらくそれを守るべきです。

if (!NodeList.prototype.forEach) { 
    NodeList.prototype.forEach = Array.prototype.forEach; 
} 
関連する問題