4

编辑
答案指出,关键字this在 jQuery 中的使用与在任何 JavaScript 代码中一样。也就是说,对象方法将对象本身接收为this,这就是函数所发生的情况$.fn(它们在 jQuery 对象上调用)。事件处理函数是回调函数,它们不是对象方法,它是调用者决定this在函数内部引用什么。它通常引用一个 DOM 元素。

原始问题

this和之间的区别$(this)通常被解释为this引用一个DOM 对象,而$(this)引用一个jQuery 对象(一个带有 jQ​​uery 包装器的 DOM 元素)。
在下面的示例中,处理函数this作为 DOM 元素传递,通过包装它,$()我们从中创建一个 jQuery 对象,因此我们可以在其上使用位于$.fn命名空间中的函数。

$('div').on('click', function(event){
    event.preventDefault();
    $(this).css('backgroundColor', 'red');
});


但是,我刚刚在 learn.jquery.com 上看到了这个解释:

插件 | jQuery学习中心

$.fn.greenify = function() {
this.css( "color", "green" );
};
$("a").greenify(); // makes all the links green

// Explanation provided by the author of the article:
// "Notice that to use css(), another method, we use this, not $( this ).
//  This is because our greenify function is a part of the same object as css()." 


这是否意味着this在传递给事件处理函数时引用了一个 DOM 对象,但在传递给 jQuery 对象方法时引用了一个 jQuery 对象?
事实上,这是有道理的,因为该方法是在 jQuery 对象上调用的,因此将 jQuery 对象传递给它是合乎逻辑的。

4

4 回答 4

7

“this”标识符与 jQuery 无关,它是 javascript 的一个组成部分。

您可以查看此链接,该链接提供了“this”关键字的详细说明:http: //www.devig.me/javascript-this-keyword/

于 2013-04-17T20:29:32.053 回答
5

在一个 jQuery 插件方法this中已经是 jQuery 对象。因此,您可以直接在this.

这与事件处理程序无关。这是因为当在对象(本例中为 jQuery 对象)上调用方法时,javascript 设置this为指向该对象。因此,由于本例中的对象是 jQuery 对象,所以就是这样this

事件处理程序回调函数不是方法调用,因此它的工作方式不同 - 它是一个回调,回调的调用者决定this使用.call()或设置什么.apply()。对于大多数事件处理程序回调,代码专门决定设置this为触发事件的 DOM 对象。

于 2013-04-17T20:29:56.470 回答
2

那是因为在您的greenify插件中,没有涉及回调,没有事件处理程序。

它被称为

$("a").greenify();

这意味着this,在函数内部,是接收者,也就是说$("a"),就像thisb执行时a.b();一样a

于 2013-04-17T20:28:10.767 回答
1

.greenifyjQuery作为实例上的方法调用。如果你查看 jQuery 源代码,你会发现

jQuery.fn = jQuery.prototype = {
  // All the goodies...

这说明你的理解是正确的。

于 2013-04-17T20:31:30.733 回答