jQuery.map()中的“this”关键字

时间:2012-04-12 10:30:37

标签: jquery firebug

我想知道:

之间的区别
$('a').map(function(){return this})
$.map($('a'), function(){return this})

当我在firebug控制台中测试它们时,它们的行为有所不同。

2 个答案:

答案 0 :(得分:4)

刚刚进行了短暂的测试,他们的表现确实不同。 'this'在后者的上下文中引用了window对象。但是,在循环传入的对象/数组时,您确实可以访问当前元素:

$('a').map(function(){
    return this
});
$.map($('a'), function(el){
    return el;
});

后者通常用于非jQuery对象和数组,而前者用于此目的。

有关详细信息,请参阅文档:

http://api.jquery.com/map/

http://api.jquery.com/jQuery.map/

答案 1 :(得分:2)

没有区别,我认为

$('a').map(function(){return this})

的包装
$.map($('a'), function(){return this})

实际上这是jQuery源代码

map: function( callback ) {
    return this.pushStack( jQuery.map(this, function( elem, i ) {
        return callback.call( elem, i, elem );
    }));
},

编辑 - 当然(我认为这是理所当然的)this是指当您在集合上调用.map()时引用当前元素,而当您使用{迭代集合时它引用窗口对象时{1}}