雷米夏普的帖子令人困惑,如果你没有仔细阅读它,在我看来。 this
的含义从不改变。在你给的例子中,有2个用途this
。作为事件的DOM元素:
$('a').click(function() {
alert(this.tagName);
});
,并包装成一个jQuery对象中的事件:
$('a').click(function() {
alert($(this).val());
});
如果你读了2段以上的非常仔细,你会发现,this
永远不会改变的意义。它总是指DOM元素。差异在于它如何使用。
在jQuery中,默认情况下,this
引用触发事件的DOM元素(不是jQuery对象)。在上面的第二个代码片段中,它是仍然是相同的DOM元素,只有它通过围绕它包装$()
才包装在jQuery元素中。与jQuery构造函数的任何参数一样,将this
传入构造函数将其转换为jQuery对象。
我觉得当Remy开始在jQuery事件的同一篇文章中讨论jQuery插件时,会出现混淆。 jQuery插件是人们很少编写和经常使用的东西。在编写jQuery插件时,您正在jQuery对象原型的上下文中工作。在这种情况下,您使用单词this
来引用您正在编写的插件。在正常使用情况下,你不会经常编写插件,所以这是一个不太常见的情况。如果不在插件的范围内,则不能使用this
来引用jQuery对象。
在JavaScript语言,关键字this
是指在JavaScript对象的当前实例。当用于JavaScript原型时,它指的是原型的实例。根据浏览器的不同,当使用非jQuery事件模型时,this
也引用了DOM元素。由于某些浏览器(Internet Explorer)并未将this
作为事件中的DOM元素,因此它使事件变得困难。为了解决这个问题,jQuery执行一些JavaScript魔术,总是使得this
引用触发事件的DOM元素。这是(使用JavaScript框架而不是滚动你自己的)许多原因之一。