2014-04-18 156 views
0

這可能看起來像一個老問題,並且有很多頁面解釋了這兩者之間的區別,但我仍然不完全理解它,因爲兩者似乎都適合我。我想我明白了爲什麼我不能在我的嵌套函數中使用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)); 
+0

你打電話給helloWorld嗎? –

+0

不知道爲什麼你需要'keys'變量 - 直接調用keyup。另外,通常會從jQuery擴展中返回'this'以允許鏈接(除非需要返回其他值)。你的東西沒有任何回報。 – Adam

回答

1

在一個jQuery fn延伸部的情況下,this指jQuery對象已經,因此$(this)實質上是一個空操作。

但是在大多數情況下,例如事件處理程序,this引用觸發事件的元素,並且您需要使用$(this)來調用它的jQuery函數。

1

在回調函數(以keyupthis應的DOM元素觸發事件而$(this)是一個jQuery對象包裝該元素(或僅包含該元素一個jQuery集合)。

然而,當你創建HelloWorld擴展this是當前jQuery對象(即取其jQuery的objecty /收集你跑$().helloWorld()。因此,在這種情況下this$(this)都是jQuery的ojects和本質上是一回事。

0

$(本) - 代表當前DOM元素的jQuery對象是哪個事件調用此函數

- 在JavaScript中這始終是指功能的「所有者」我們前或者更確切地說,是一個函數是一種方法的對象。

+1

並非總是如此。查看其他答案。 – Matt