8

虽然.map()方法的接口是.map( callback(index, domElement) ),但它是$.map( array, callback(elementOfArray, indexInArray) )用于 $.map()... 关于 $.map() 选择将返回的参数按值索引等顺序放置的原因有什么想法吗?

4

3 回答 3

7

因为 API 不完善。它一开始是不一致的,但现在修复它会破坏现有的使用$.map().

于 2012-08-15T04:19:05.360 回答
2

如果您研究 jQuery API,您会注意到所有在一组选定元素上工作并接受回调的方法,例如.each.html.text等,都将元素的索引作为第一个参数传递,即.map在这里对齐。通常您使用回调内部访问当前元素this,这只是 jQuery 中的一种常见模式,因此开发人员可能已经决定将索引作为第一个参数更重要。

另一方面,本机Array.prototype.map方法将元素的值作为第一个参数传递给回调,因此以相同的方式工作似乎是有意义$.map的,因为它应该处理一组通用的项目。

于 2012-08-15T04:29:46.990 回答
1

是的,jQuery().map() 和 jQuery.map() 是有区别的。

概述一些差异:

jQuery.map() = 这倾向于迭代泛型集合

jQuery().map() = 类数组对象必须转换为数组 (.makeArray())

jQuery.map() = 主要用于获取或设置元素集合的值并返回该新数组

.map() 也是一个 ECMAScript5 函数,并在 jQuery 之外定义(尽管已实现)。有人想知道 jQuery().map() 是否是一个较旧的实现。.map() 显然更快!

John Resig 指出,“jQuery.map 主要设计用于 DOM 元素数组(如文档中所述)。因此,它会执行诸如去除 null/undefined 之类的操作,并将节点数组扁平化为单个数组。 " 这在 ECMA (Mozilla) 中定义。另一个实现是 Resig 自己的,因此有所不同。这不是糟糕的设计!!!!!!!

第二个原因:“它并不像“修复它”那么简单......jQuery.map 的回调具有匹配 Array.prototype.map 的参数顺序,而 jQuery.fn.map 的参数顺序匹配所有其他 jQuery 对象迭代器回调参数顺序。更改为一种或另一种会破坏向后兼容性,jQuery 极力避免这种情况” 阅读

于 2012-08-15T04:33:43.520 回答