.map()
メソッドのインターフェースは.map( callback(index, domElement) )
、$.map( array, callback(elementOfArray, indexInArray) )
$。map()用です... $。map()が返された引数をvalue-indexなどの順序で配置することを選択する理由について何か考えはありますか?
3 に答える
APIが不完全だからです。最初は一貫性がありませんでしたが、これを修正すると、を使用する既存のコードが破損します$.map()
。
- http://bugs.jquery.com/ticket/5686:「これを修正して下位互換性を維持する方法はありません。」
- http://bugs.jquery.com/ticket/7008:「引数は逆になっていますが、変更するために多くのコードが壊れてしまいます。」
jQuery APIを調べると、選択した要素のセットで機能し、、、、などのコールバックを受け入れるすべてのメソッドが、最初の引数として要素のインデックスを渡すことに気付くでしょう。.each
つまり、ここに並んでいます。通常、コールバック内で現在の要素にアクセスします。これはjQueryの一般的なパターンであるため、開発者は最初の引数としてインデックスを使用することがより重要であると判断した可能性があります。.html
.text
.map
this
一方、ネイティブArray.prototype.map
メソッドは要素の値を最初の引数としてコールバックに渡すため$.map
、一般的なアイテムのセットを処理することが想定されているため、同じように機能するのは理にかなっているようです。
はい、jQuery()。map()とjQuery.map()には違いがあります。
いくつかの違いを概説するには:
jQuery.map()=これはジェネリックコレクションを反復処理する傾向があります
jQuery()。map()=配列のようなオブジェクトは配列にキャストする必要があります(.makeArray())
jQuery.map()=主に、要素のコレクションの値を取得または設定し、その新しい配列を返すために使用されます
また、.map()はECMAScript5関数であり、jQueryの外部で定義されています(実装されていますが)。jQuery()。map()が古い実装だったかどうか疑問に思います。.map()は明らかに高速です!
John Resigは、「jQuery.mapは、主にDOM要素の配列で使用するように設計されています(ドキュメントで概説されています)。このため、null / undefinedを取り除き、ノードの配列を単一の配列にフラット化します。 「」これはECMA(Mozilla)で定義されているとおりです。もう1つの実装は、Resig自身であるため、違いがあります。それは悪いデザインではありません!!!!!! 読む
2番目の理由:「「修正」するほど単純ではありません... jQuery.mapのコールバックにはArray.prototype.mapと一致するパラメーターの順序がありますが、jQuery.fn.mapのパラメーターの順序は他のすべてのjQueryオブジェクトイテレーターのコールバックのパラメーターの順序と一致します。どちらかに変更すると、下位互換性が失われます。これは、 jQueryが回避するのに非常に苦労します。」