Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jquerythis和$(this)_Javascript_Jquery_Jquery Plugins - Fatal编程技术网

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函数。

在函数回调中(to
keyup
this
应该是触发事件的DOM元素,而
$(this)
是包装该元素的jQuery对象(或仅包含该元素的jQuery集合)

但是,当您创建helloWorld扩展时,这个是当前的jQuery对象(即运行
$().helloWorld()
的任何一个jQuery对象/集合)。因此在这种情况下,
这个
$(这个)
都是jQuery对象,本质上是同一件事。

$(这个)-表示调用此函数的当前DOM元素的jQuery对象


-在JavaScript中,这总是指“所有者”对于我们正在执行的函数,或者更确切地说,对于函数是其方法的对象。

如何调用
helloWorld
?不确定为什么需要
keys
变量-直接调用keyup即可。另外,通常从jQuery扩展返回
this
,以允许链接(除非您需要返回另一个值)。您的值不会返回任何内容。不总是如此。请参阅其他答案。