2014-10-28 92 views
1

經常在一些jQuery代碼我看到this被分配給jQuery中的變量,我不明白這種方法的原因?爲什麼要將「this」分配給jQuery中的變量?

這是一個jQuery插件構造函數的例子:

//constructor 
    function Nullpoll(element, options){ 
     var widget = this; 
     widget.config = $.extend({}, defaults, options); 
     widget.element = element; 

     widget.element.on("click", function() { 
      alert("Test") 
      }); 

     widget.element.one("change", function(e){ 
      widget.element.find("button").removeProp("disabled"); 
     }); 

     this.init(); 
     } 
+1

因爲,在這種情況下,裏面的聽衆'this'不是'widget'但'widget.element'。在上面聲明它更易讀 – 2014-10-28 10:08:06

回答

1

this的值由其調用函數的方式決定。

你把它分配給不同的變量之一:

  1. 給它更多的信息名
  2. (更常見),從而使不同的功能可用其可以訪問第一功能的範圍

在這種特殊情況下,匿名功能pa ssed到widget.element.one()使用Nullpoll的呼叫中的值this。如果試圖使用this關鍵字,它會得到不同的值(這是什麼值將取決於one功能怎麼叫匿名函數)

1

http://learn.jquery.com/javascript-101/this-keyword/

在JavaScript中,因爲在大多數的面向對象的編程語言,this是在方法中用於指在其上調用的方法的對象的特殊關鍵字。

  • 如果函數是使用Function.call()Function.apply()this將被設置爲傳遞給.call()/.apply()第一個參數調用:使用簡單一系列步驟來確定這個值。如果傳遞給.call()/.apply()的第一個參數是nullundefined,this將引用全局對象(這是Web瀏覽器中的window對象)。
  • 如果正在調用的函數是使用Function.bind()創建的,則this將是在創建函數時傳遞給.bind()的第一個參數。
  • 如果函數被調用爲對象的方法,則this將引用該對象。
  • 否則,該函數將作爲一個獨立函數被調用,而不會附加到任何對象,並且this將引用全局對象。
+1

這個答案描述了'this',但沒有回答OP關於爲什麼'this'被分配給代碼中的變量的問題。 – jfriend00 2014-10-28 10:22:38

1

當使用內聯回調的範圍內(如在事件處理程序你的例子),回調中this的值通常與父範圍不一樣。因此,如果您想在這些回調中訪問父範圍中的this的值,那麼將其保存到父範圍中的局部變量是一種常見的設計模式。然後,在回調中,即使this在回調中可能具有不同的值,仍然可以從父範圍引用該值。

作爲第二個好處,一些極小可以通過使用一個局部變量,而不是this因爲局部變量可以被最小化被重新命名爲單個字符變量做更小的代碼,但this不能被重新命名。

類似的問題了一堆答案在這裏:What is the value of var me = this;

相關問題