Почему аргументы обратного вызова jQuery несовместимы?

Распространенный шаблон в jQuery - это метод, который принимает обратный вызов, которому передается элемент массива и его индекс в этом массиве. Тем не менее, кажется совершенно случайным, какой аргумент приходит первым. Например, из документов jQuery по адресу http://api.jquery.com :

  • jQuery.each (collection, callback (indexInArray, valueOfElement))
  • .each (function (index, Элемент))
  • jQuery.map (массив, обратный вызов (elementOfArray, indexInArray))
  • .map (обратный вызов (index, domElement))
  • jQuery.grep (массив, функция (elementOfArray, indexInArray), [инвертировать] ])
  • .filter (функция (индекс))

В трех случаях ( jQuery.each , .each , .map ) индекс приходит первым В двух других ( jQuery.grep , jQuery.map ) элемент идет первым. Я знаю, что API-интерфейс уже установлен, но мне кажется, что это является грубым несоответствием.

Есть ли образец, по которому я ' м отсутствует или это просто случайно? Должно ли это быть исправлено или я должен просто заткнуться и запомнить их?

25
задан brad 31 August 2010 в 19:08
поделиться

2 ответа

Это не совсем случайно. Потому что:

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

Видите схему? Во втором примере есть второй аргумент, но он передается только для удобства, и он такой же, как this.

Шаблон таков, что первый аргумент всегда «более» важен, чем второй, а последний аргумент должен быть наименее важным («более необязательный»). Таким образом, вам не нужно указывать все наименее важные аргументы, если вам нужен только один. А в случае с $(...).each часто вам даже не потребуется никаких аргументов, потому что это — это именно то, что вам нужно.

8
ответ дан 28 November 2019 в 21:54
поделиться

Поскольку Javascript позволяет игнорировать параметры, которые вы не используете (т. е. вы можете определить функцию обратного вызова, которая принимает только один параметр, даже если она будет вызываться с двумя), как правило, первым параметром является тот, который вы используете. скорее всего, будет использовать. (На самом деле переменная this обычно является элементом данных, который вы, скорее всего, будете использовать, за которым следует первый параметр и т. д.)

2
ответ дан 28 November 2019 в 21:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: