2011-08-29 78 views
15

我不是最好的jquery,我遇到了var初始化,我不知道爲什麼編寫代碼的人這樣做了。

在init一個插件,我們有

this.init = function(settings) { 
    var $this = this; 
    this.s = { 
     initialSlide: 0, 
     firstSlide: true, 
    }; 
    ... more code, some uses $this, some uses "this" 
} 

那麼究竟是什麼的區別就在這裏與「$ this」和「這個」,爲什麼不使用一個或其他所有的時間?

+0

是的,它是一個jquery idiom –

+0

@Matt:代碼中沒有jQuery。將「this」賦值給另一個變量在「普通JavaScript」中也很常見。 –

+0

@Felix:它是一個插件,這意味着這是指一個jQuery對象。有(或曾經是)用jquery對象加$前綴的jquery方法。因此,它是一個jQuery的問題。如果它不是$ jquery,那麼你可能會看到,那個,自己或者更具描述性的關於這個實際上是什麼的意思 –

回答

31

通常,這意味着this的副本。關於this的事情是它在每個函數中都會改變。但是,通過這種方式存儲,$this不會發生變化,而this確實發生了變化。

jQuery嚴重使用魔術this值。

考慮以下代碼,那裏像你一樣的您可能需要的東西:

$.fn.doSomethingWithElements = function() { 
    var $this = this; 

    this.each(function() { 
     // `this` refers to each element and differs each time this function 
     // is called 
     // 
     // `$this` refers to old `this`, i.e. the set of elements, and will be 
     // the same each time this function is called 
    }); 
}; 
+0

你怎麼寫$ this? jQuerythis? – Hitesh

+1

var $這和其他任何變量名稱一樣,$這只是讓讀取代碼的其他人知道變量在頁面下方做了些什麼的一種方法。簡而言之,是的,你可以編寫'var jQuerythis',但這沒有任何區別。您也可以在舊jQuery中使用$,正如上面所述$ this不依賴於jQuery,它只是一種創建'this'副本的方法。 –

5

在這種情況下,什麼都沒有。 $this只是另一個變量聲明,其中this已分配給它。

通常情況下,我看到這個快捷方式在使用JavaScript庫時被人們用來包裝this。例如,jQuery中的典型用法是:

// rather than writing $(this) everywhere 
var $this = $(this); 

$this.each(function(){ 
    // Do Something 
}); 
0

這意味着什麼在這種情況下(沒有雙關語意)。如果陳述是var $this = $(this),那會更合理,因爲那樣會允許使用所有漂亮的jQuery功能。

+0

不正確,將其重新分配給不同的變量允許內部閉包引用外部範圍。 – Evert

0

其他人都說,jquery代碼中還有一個習慣用法,在jquery對象前加上$。不知道它是多麼受歡迎,但曾經看到很多。

0

我這樣做$ this = $(this),因爲它似乎會在每次想要使用它時保存該調用的實際處理。

此外,對於'魔術'這個''功能,別人提到。保留原始副本很方便。

0

實際上,jQuery是JavaScript DOM的一個包裝,它既增強和簡化了它。 非常簡單jQuery選擇返回jQuery對象/秒即

var jQueryResults = $("article"); //Contains all article elements in the DOM as JQuery objects 

然而,與Java語言中選擇元素,則返回HTML DOM元素,即

var normalResults = document.getElementsByTagName("article");//Contains all article elements in the DOM as HTML objects 

的問題出現在DOM對象不提供相同的功能, JQuery對象提供。

下面是一個事件例子示出的區別:

$('.changeColorHover').hover(function() { 
    this.attr("style", "color:red"); 
}); //Will not work as we are trying to call a JQuery method on a DOM object 

考慮到提到的上方的「這個」關鍵字是一個DOM對象,因此你需要將其轉換爲一個jQuery對象,以便利用jQuery方法。

$('.changeColorHover').hover(function() { 
     $(this).attr("style", "color:red"); 
}); //Will work since we have first converted the DOM object to a JQuery object 

總結一下,this關鍵字允許你訪問調用事件的對象,因爲這會引發引發事件的對象。但是,這是一個DOM對象,而不是一個jQuery對象。因此,除非將其轉換爲jQuery對象,否則您想使用的任何jQuery方法都不可用。

相關問題