jQuery - $ .map()&之间的设计不一致。地图()?

时间:2012-08-15 04:11:38

标签: jquery

虽然.map()方法的界面为.map( callback(index, domElement) ),但$ .map()的$.map( array, callback(elementOfArray, indexInArray) ) ...有任何关于$ .map()选择放置的原因以诸如value-index?

之类的顺序返回参数

3 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:2)

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

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

答案 2 :(得分: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自己,因此不同。这不是糟糕的设计!!!!!! Read

第二个原因: “它并不像”修复它“那么简单... ... jQuery.map的回调具有匹配Array.prototype.map的param顺序,而jQuery.fn.map的param顺序匹配所有其他jQuery对象迭代器回调参数顺序。更改为1或者另一个会破坏向后兼容性,jQuery需要付出很大的努力来避免“ Read