修改
答案指出,关键字this
在jQuery中使用,就像在任何JavaScript代码中一样。也就是说,对象方法将对象本身作为this
接收,这就是$.fn
函数所发生的事情(它们在jQuery对象上调用)。事件处理函数是回调函数,它们不是对象方法,调用者决定函数内部this
将引用什么。它通常引用DOM元素。
原始问题
this
和$(this)
之间的差异通常被解释为this
引用了 DOM对象,而$(this)
引用了 jQuery object (一个带有jQuery包装器的DOM元素)
在下面的示例中,处理函数作为DOM元素传递this
,并通过将其包装在$()
中,我们从中创建一个jQuery对象,因此我们可以使用它上面的函数{ {1}}命名空间。
$.fn
但是,我刚刚在learn.jquery.com上看到了这个解释:
Plugins | jQuery learning center
$('div').on('click', function(event){
event.preventDefault();
$(this).css('backgroundColor', 'red');
});
这是否意味着$.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()."
在传递给事件处理函数时引用了DOM对象,但在传递给jQuery对象方法时引用了jQuery对象?
事实上,它是有道理的,因为该方法是在jQuery对象上调用的,因此将它传递给jQuery对象是合乎逻辑的。
答案 0 :(得分:7)
“this”标识符与jQuery无关,它是javascript的组成部分。
您可以查看此链接,其中提供了“this”关键字的详细说明:http://www.devign.me/javascript-this-keyword/
答案 1 :(得分:5)
在jQuery插件中,方法this
已经是jQuery对象。因此,您可以直接在this
上使用jQuery方法。
这与事件处理程序无关。这是因为当在对象(在这种情况下是jQuery对象)上调用方法时,javascript将this
设置为指向该对象。所以,由于这种情况下的对象是一个jQuery对象,那就是this
。
事件处理程序回调函数不是方法调用,因此它的工作方式不同 - 它是一个回调,回调的调用者决定使用this
或.call()
设置.apply()
的内容。对于大多数事件处理程序回调,代码专门决定将this
设置为触发事件的DOM对象。
答案 2 :(得分:2)
那是因为在你的greenify
插件中,没有涉及回调,没有事件处理程序。
由
调用$("a").greenify();
这意味着,当您执行this
时,函数内部的$("a")
是this
的接收者,就像b
一样a.b();
是a
。
答案 3 :(得分:1)
.greenify
被调用为jQuery
实例上的方法。如果你查看jQuery源代码,你会发现
jQuery.fn = jQuery.prototype = {
// All the goodies...
表明您的理解是正确的。