0

我现在正在学习jQuery,并且很惊讶如果在对象或通用可迭代对象上map调用该方法,则回调中相同参数的顺序不同。jQuery如果我调用map对象jQuery,回调将首先传递对象索引,然后传递对象值:

$( 'div:lt(5)' ).map( function( i, j ) { console.log( index, object ); } );

但是如果我调用map一个列表或字典,回调参数会被反转!对象在前,索引在后:

$.map( [ 'a', 'b', 'c' ], function( i, j ) { console.log( object, index ); } );

是这种不一致的任何架构原因,还是只是随机的黑客攻击而没有人关心?

4

2 回答 2

1

jQuery.map()函数在 1.0 版本中可用,而该.map()函数是在 jQuery 1.2 中添加的。我假设为jQuery.map()(value, index) 选择了一个顺序,然后.map()在 jQuery 1.2 中添加它时,它与 1.0 中可用的其他类似函数保持一致,.each()并使用了 (index, value) 顺序。

不过,这纯粹是猜测,背后可能根本没有任何决定。它也没有开始解决为什么jQuery.map()与 不一致jQuery.each(),它使用与基于实例的等效项相同的顺序 (index,value),并且在 1.0 版中也可用。

于 2013-05-02T11:06:27.620 回答
1

我喜欢@AnthonyGrists 的回答,但这是另一个角度。

我同意不同的论点顺序令人困惑,但有一种逻辑。

  • 使用jQueryCollection.map(),您更有可能希望将索引指定为单独的参数,因为this它可以作为对集合元素的引用。

  • jQuery.map()另一方面,withthis指的是全局命名空间,因此您(有点)更可能希望将元素指定为单独的参数而不是索引。

不幸的是,现在的问题变成了,为什么这两种方法this的使用方式不同?也许这和我们试图回答的问题一样大。

完全理性 - 不。潜在的理性——可能。

于 2013-05-02T11:21:44.687 回答