2013-05-02 36 views
0

我现在在学习jQuery,并且很惊讶map方法对于回调中的相同参数具有不同的顺序,如果它在jQuery对象或通用迭代器上调用。如果我在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); }); 

是不是这样的不一致任何建筑的原因,还是只是一个随机的黑客也没有人在乎呢?

+0

你的例子对我没有意义。 – Adder 2013-05-02 11:01:59

+0

@Adder对不起。什么是文字描述? – grigoryvp 2013-05-02 11:03:41

+0

@EyeofHell:[也许这个例子](http://jsfiddle.net/hM6HT/)将帮助人们理解你的问题 – musefan 2013-05-02 11:06:12

回答

1

jQuery.map()函数在版本1.0中可用,而.map()函数是在jQuery 1.2中添加的。我假设为jQuery.map()(值,索引)选择了一个订单,然后当在jQuery 1.2中添加.map()时,它与.each()一致 - 以及其他类似的功能 - 哪些在1.0中可用,并使用(索引,值)顺序。

虽然这完全是猜测,但可能根本没有任何决定。它也没有开始解决为什么jQuery.map()jQuery.each()不一致,jQuery.each()使用与其基于实例的等效项相同的顺序(索引,值),并且在版本1.0中也可用。

1

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

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

  • 随着jQueryCollection.map(),你更有可能想要指定索引作为一个单独的参数,因为this可作为集合元素的引用。

  • 随着jQuery.map(),在另一方面,this指的全局命名空间,所以你(种)更可能要指定的元素比指数独奏说法。

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

完全理性 - 没有。潜在的理性 - 可能。

相关问题