Javascript jquerythis和$(this)
这似乎是一个老生常谈的问题,有很多页面解释了这两个问题之间的区别,但我仍然不能完全理解,因为这两个问题对我来说似乎都很好。我想我理解了为什么不能在嵌套函数中使用Javascript jquerythis和$(this),javascript,jquery,jquery-plugins,Javascript,Jquery,Jquery Plugins,这似乎是一个老生常谈的问题,有很多页面解释了这两个问题之间的区别,但我仍然不能完全理解,因为这两个问题对我来说似乎都很好。我想我理解了为什么不能在嵌套函数中使用this或$(this)。但为什么这两个变量都有效呢?我应该用哪一个呢 (function($) { $.fn.helloWorld = function() { var $wrap1 = this; var $wrap2 = $(this); var keys = function(){ $(docu
this
或$(this)
。但为什么这两个变量都有效呢?我应该用哪一个呢
(function($) {
$.fn.helloWorld = function() {
var $wrap1 = this;
var $wrap2 = $(this);
var keys = function(){
$(document).keyup(function (event) {
if (event.keyCode === 39) {
console.log("key pressed");
event.preventDefault();
this.fadeOut(); //Does not work
$(this).fadeOut(); //Does not work
$wrap1.fadeOut(); //Does work
$wrap2.fadeOut(); //Does work
}
});
};
keys();
}
}(jQuery));
在jQuery
fn
扩展的情况下,这个
已经引用了jQuery对象,因此$(这个)
本质上是不可操作的
但是,在大多数情况下,例如事件处理程序,this
是指触发事件的元素,您需要使用$(this)
对其调用jQuery函数。在函数回调中(tokeyup
)this
应该是触发事件的DOM元素,而$(this)
是包装该元素的jQuery对象(或仅包含该元素的jQuery集合)
但是,当您创建helloWorld扩展时,这个是当前的jQuery对象(即运行$().helloWorld()
的任何一个jQuery对象/集合)。因此在这种情况下,这个
和$(这个)
都是jQuery对象,本质上是同一件事。$(这个)-表示调用此函数的当前DOM元素的jQuery对象
这-在JavaScript中,这总是指“所有者”对于我们正在执行的函数,或者更确切地说,对于函数是其方法的对象。如何调用
helloWorld
?不确定为什么需要keys
变量-直接调用keyup即可。另外,通常从jQuery扩展返回this
,以允许链接(除非您需要返回另一个值)。您的值不会返回任何内容。不总是如此。请参阅其他答案。