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.
在第一种情况中,这是指对象,但在第二种情况中,它指的是锚标记。当我们在另一个函数和中调用函数时,为什么这会改变为对象?
答案 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
。