2012-08-15 11 views
8

.map()メソッドのインターフェイスは.map(callback(index, domElement))ですが、$ .map()の場合は$.map(array, callback(elementOfArray, indexInArray))です。なぜ$ .map()が返された引数をvalue-indexなどの順序で配置するのを選んだのですか?

+0

を避けるために苦心を要する互換性を破る。 – Esailija

答えて

2

あなたはjQueryのAPIを勉強すれば、あなたがなど.each.html.text、として選択された要素の集合上で動作し、コールバックを受け入れるすべてのメソッドは、すべてのように要素のインデックスを渡すことがわかります最初の引数、すなわち.mapがここに並んでいます。通常、コールバック内に現在の要素thisでアクセスしていますが、これはjQueryの一般的なパターンなので、開発者はインデックスを最初の引数として持つことが重要であると判断した可能性があります。

一方、ネイティブのArray.prototype.mapメソッドは、最初の引数として要素の値をコールバックに渡すので、$.mapは同じ方法で動作すると思われます。一般的な項目のセットを処理すると考えられます。

+0

有効な説明= – Kay

7

APIが不完全なためです。それは矛盾していましたが、今修正すると、$.map()を使用する既存のコードが破られます。

+0

何を私に興味をそそらすることは、これはいないようだということです – Kay

+0

真実ですが、同じバージョンのjQueryにも追加されていません。 '$ .map() 'がv1.0で追加されましたが、' .map() 'はv1.2まで追加されていませんでした。物語の道徳は、良いAPI設計は非常に難しく、完璧なAPI設計はほとんど不可能であるということです。 –

1

はいjQuery()。map()とjQuery.map()の間に違いがあります。いくつかの相違点について概説する

:。

jQuery.mapを()=これはjQueryの()

ジェネリックコレクションを反復処理する傾向があるマップ()=アレイのようなオブジェクトは を配列にキャストする必要があります(.makeArray())

jQuery.map()predominantely取得又は の要素のコレクションを値を設定し、返すために使用=新しいアレイ

その

また、.map()はECMAScript5関数であり、jQueryの外で定義されています(実装されていますが)。 jQuery()。map()が古い実装であるかどうかが不思議です。 .map()は明らかに高速です!

John Resigは、「jQuery.mapは、主​​にDOM要素の配列で使用するように設計されています(ドキュメントで概説されています)。このため、null/undefinedから取り除き、ノードの配列を平らにします単一のアレイです。これはECMA(Mozilla)で定義されています。他の実装はResig自身であり、したがって違いがあります。それは貧しいデザインではない!!!!!! Read

第二の理由: は... jQuery.mapのコールバックがjQuery.fn.mapのPARAM順序が他のすべてに一致している間、Array.prototype.mapに一致するのparam順序を持っている 『それを固定「それはちょうどように単純ではありません』 jQueryオブジェクトイテレータのコールバックパラメータの順序。どちらか一方に変更すると、後方jQueryの `.map`が暗黙的にもネストされた配列を平らことは注目に値する。また、「 Read

関連する問題