2013-05-02 39 views
0

我現在在學習jQuery,並且很驚訝map方法對於回調中的相同參數具有不同的順序,如果它在jQuery對象或通用迭代器上調用。如果我在jQuery對象調用map,回調將被傳遞對象索引第一和對象值第二:是否有什麼理由爲什麼'地圖'在jQuery中的作用與靜態和實例方法不同?

$('div:lt(5)').map(function(i, j) { console.log(index, object); }); 

但如果我叫map列表或字典,回調的參數是相反的!對象超出第一和第二索引:

$.map([ 'a', 'b', 'c' ], function(i, j) { console.log(object, index); }); 

是不是這樣的不一致任何建築的原因,還是隻是一個隨機的黑客也沒有人在乎呢?

+0

你的例子對我沒有意義。 – Adder 2013-05-02 11:01:59

+0

@Adder對不起。什麼是文字描述? – grigoryvp 2013-05-02 11:03:41

+0

@EyeofHell:[也許這個例子](http://jsfiddle.net/hM6HT/)將幫助人們理解你的問題 – musefan 2013-05-02 11:06:12

回答

1

jQuery.map()函數在版本1.0中可用,而.map()函數是在jQuery 1.2中添加的。我假設爲jQuery.map()(值,索引)選擇了一個訂單,然後當在jQuery 1.2中添加.map()時,它與.each()一致 - 以及其他類似的功能 - 哪些在1.0中可用,並使用(索引,值)順序。

雖然這完全是猜測,但可能根本沒有任何決定。它也沒有開始解決爲什麼jQuery.map()jQuery.each()不一致,jQuery.each()使用與其基於實例的等效項相同的順序(索引,值),並且在版本1.0中也可用。

1

我喜歡@ AnthonyGrists的回答,但這裏是另一個角度。

我同意參數的不同順序令人困惑,但有一種邏輯。

  • 隨着jQueryCollection.map(),你更有可能想要指定索引作爲一個單獨的參數,因爲this可作爲集合元素的引用。

  • 隨着jQuery.map(),在另一方面,this指的全局命名空間,所以你(種)更可能要指定的元素比指數獨奏說法。

不幸的是,現在的問題變成,爲什麼這兩種方法不能以同樣的方式使用this?也許這與我們試圖回答的問題一樣重大。

完全理性 - 沒有。潛在的理性 - 可能。

相關問題