jquery中此引用的范围?

时间:2013-08-18 15:04:15

标签: javascript jquery this

var obj = {     
    doIt : function(){
       console.log(this)
    }
}
$('a').on('click', function(){
    obj.doIt(); // this now refers to object      
});

$('a').on('click', obj.doIt); // this refers to anchor tag.

第一种情况中,这是指对象,但在第二种情况中,它指的是锚标记。当我们在另一个函数中调用函数时,为什么这会改变为对象?

1 个答案:

答案 0 :(得分:1)

jQuery操纵this,以便您可以轻松访问已选择的DOM元素或已触发其事件的DOM元素。当this的上下文丢失时,这显然会导致应用对象方法时出现问题。

查看jQuery的.proxy()方法。这样您就可以this范围来引用obj的上下文。

$("a").on( "click", $.proxy(obj.doIt, obj));

要了解您的情况的差异,您需要了解在DOM元素的上下文中应用/调用作为.on()方法的第二个参数(或第三个...)引用的函数。也就是说,函数内的this指的是元素。但是,在您的第一个示例中,您只是在没有任何预设上下文的情况下调用obj.doIt()方法,因此this引用了obj