次の問題を参照してください:通常NodeList.prototype.forEach = Array.prototype.forEach;
NodeList.prototype.forEach = Array.prototype.forEach;
forEach
は、配列のちょうど性質であるが、同様にすべてのNodeList
秒のプロパティとして設定することで、ANにNodeList
を変換する必要はありません配列の前にノードをループすることができます。forEach
。
次の問題を参照してください:通常NodeList.prototype.forEach = Array.prototype.forEach;
NodeList.prototype.forEach = Array.prototype.forEach;
forEach
は、配列のちょうど性質であるが、同様にすべてのNodeList
秒のプロパティとして設定することで、ANにNodeList
を変換する必要はありません配列の前にノードをループすることができます。forEach
。
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も参照してください。
JSの機能は非常に多く、完全にうまくいきます。 – Alnitak
なぜ、Array.prototype.forEach.call( '... Array.prototype.forEach(...')の代わりに、MDNの構文で2番目のパラメータで 'this'を定義できると言いますか?https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach私は理解を深めようとしています。 –
@MuhammadUmer:コメントで質問しないでください。つまり、 'thisArg'は'コールバック中の 'this'の値、' Array.prototype.forEach'中の__not__は返されません。 – Zeta
ゼータが述べたように、便利機能を使用する方がよいでしょう。しかし、このバージョンでは、コンテキストを与えることができます。
var forEach = function(list, callback, context){
return Array.prototype.forEach.call(list, callback, context);
};
他の人が使用するライブラリで作業している場合は、これを行うことはお勧めできません。
あなた自身のコード(つまり、ウェブサイト)の場合、大きな問題ではないと思います。今後のブラウザではネイティブにNodeList.prototype.forEach
(Chromeは既に対応している)をサポートする予定であるため、おそらくそれを守るべきです。
if (!NodeList.prototype.forEach) {
NodeList.prototype.forEach = Array.prototype.forEach;
}
私はこのアイデアが気に入っています。他の人が問題を指摘しているのを待っています。 –
[NodeList.js](https://github.com/eorroe/NodeList.js)をチェックしてください –