2010-08-31 26 views
24

jQuery中的一種常見模式是一種方法,它接受一個回調,該回調傳遞數組中的一個元素及其索引。但是,首先看起來完全是隨機的。例如,從jQuery文檔在http://api.jquery.com爲什麼jQuery的回調參數不一致?

  • jQuery.each(collection, callback(indexInArray, valueOfElement))
  • .each(function(index, Element))
  • jQuery.map(array, callback(elementOfArray, indexInArray))
  • .map(callback(index, domElement))
  • jQuery.grep(array, function(elementOfArray, indexInArray), [ invert ])
  • .filter(function(index))

在三種情況下(jQuery.each,.each,.map)該指數排在第一位。在另外兩個(jQuery.grepjQuery.map)元素首先。我知道api現在已經設定好了,但對我來說這似乎是一個嚴重的不一致。

有我缺少一個模式或者這只是隨機的?如果這是固定的,或者我應該閉嘴並記住它們?

+2

尼斯可用做!所以PHP的數組函數並不是唯一具有不一致參數排序的函數。 – 2010-08-31 19:09:46

回答

8

它並不完全是隨機的。因爲:

$.map($('selector'), function(el, index) { /* element (DOMElement) is first, index optional */ }); 
$('selector').map(function(index) { /* 'this' (DOMElement) is first.... index optional */ }); 

查看模式?第二個例子有第二個參數,但它只是爲了方便傳遞,它與this相同。

的模式是,第一個參數總是比第二「更多」重要的是,和的最後一個參數應該是最不重要的(以下簡稱「多種任選的」)。所以如果你只需要一個,你不需要指定所有最不重要的參數。而在$(...).each的情況下,通常你甚至不需要任何參數,因爲this只是你想要的。

+2

與選擇器和上下文相同的東西。 $(myselector,mycontext)上下文是可選的,這就是爲什麼它是第二。 – 2010-08-31 19:16:50

+0

@Mark Schultheiss,正好。 – 2010-08-31 19:18:32

+0

有道理 - 好點!我開始惱火,但現在如果我想到這樣,我可能會記得! – Jason 2012-08-26 22:03:05

2

由於JavaScript允許你忽略你不使用的參數(例如,你可以定義一個回調函數,僅採用一個參數,即使將有兩個被稱爲),通常,第一個參數是一個你大多可能會被使用。 (實際上,變量this通常是您最有可能使用的數據項,其次是第一個參數等)

7

這是我感到沮喪也有時 - $.each是一個,我總是陷入困境。

我認爲這是由於對框架的不同部分的不同的人/團隊。這是一個由社區驅動的框架,所以沒有人可能很早就發現它,現在框架如此廣泛,如果不破壞互聯網上所有網站的35%,它們就無法修復它。

我不認爲這將是固定的 - 至少這是我的意見/態度。我只需要將它們提交給記憶並希望獲得最好的結果!

0

IMHO,$.map$.grep行爲像在紅寶石類方法,因爲:

  • 他們採取目標陣列作爲第一個參數。
  • 回調參數順序與紅寶石(each_with_index

這是按我的經驗,紅寶石只是我個人的記憶是一致的。

其他方法是有點jQuery的遺留問題,不容易「修復」,但我仍然希望有一個修復,因爲它已經發生,jQuery latest is not really LATEST,所以什麼是不可能的?

相關問題