2
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.

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

4

1 回答 1

1

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

看看jQuery的.proxy()方法。这将允许您将范围限定this为引用obj' 的上下文。

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

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

于 2013-08-18T15:07:26.557 回答