Кто-нибудь, почему отличная отличная функция jQuery.each
разработана иначе, чем (теперь) native Array.forEach
? F.ex:
var arr = ['abc','def'];
arr.forEach(function(entry, index) {
console.log(entry); // abc / def
});
Это абсолютный смысл. Но jQuery решил поместить index
в качестве первого аргумента:
$.each(arr, function(index, entry) {
console.log(entry);
});
Кто-нибудь знает причины этого решения? Я всегда использовал $.each
экстенсивно, но он всегда искажал меня, что индекс был первым аргументом, поскольку он редко используется. Я знаю, что jQuery реализовал прямую ссылку через this
, но это очень запутанно, если вы это сделаете:
var arr = ['abc','def'];
$.each(arr, function() {
console.log(this === 'abc'); // false both times, since this is a String constructor
});
Не то, чтобы это меня так сильно беспокоило, я предпочитаю использовать собственные полисы для наиболее распространенных новых функций массива, но мне всегда было интересно узнать о дизайнерском решении. Возможно, это было сделано в более старые времена, прежде чем браузеры внедрили native forEach
, а устаревшая поддержка не позволила им изменить его или...?
Или, может быть, он разработан таким образом, потому что он также может использоваться на собственных объектах, чем тогда "имеет смысл" поставить ключ до значения в обратном вызове...?
Sidenote: я знаю, что underscore.js(и, возможно, другие библиотеки) делает это наоборот (больше похоже на нативную функцию).