2013-08-01 33 views
0

這裏http://www.quirksmode.org/js/this.html它說,「在JavaScript 總是指到‘所有者’我們正在執行或相當的功能,該功能是一個方法的對象。」在這個jQuery代碼示例中,'this'是指什麼?

但是,我很困惑這個在下面的代碼示例中引用,因爲嵌套的匿名函數。

Drupal.behaviors.ajaxPoll = function(context) { 
    $('form.ajax-poll:not(.ajax-poll-processed)', context).addClass('ajax-poll-processed').each(function() { 
    // Find the form and poll wrapper items that will be affected. 
    var $form = $(this); 
    var $pollWrapper = $form.parents('.poll_content, .poll').filter(':first'); 

...

是功能(這是指這個)Drupal.behaviors.ajaxPoll的對象?

另外,我還明白,寫$的形式基​​本相同的書寫jQueryform。在變量的名稱中使用$ -sign的邏輯是什麼?

+2

_'In的JavaScript'this'總是指我們executing'_功能的「主人」 - 除了當它沒有。 [MDN的解釋](https://developer.mozilla.org/zh-CN/docs/JavaScript/Reference/Operators/this)值得一讀。在命名變量時,'$'只是另一個字符。 – nnnnnn

+1

$只是一個命名jQuery對象的約定。使用你的控制檯。你會看到'this'是指當前在每個循環內部定位的表單,thx到關閉 –

+1

它實際上是*我們正在執行的函數的所有者。 (因爲jQuery實現.each())的方式 –

回答

1

在JavaScript中,this是動態的。根據調用函數的位置/方式,可能會採用不同的值。這與您可能知道的大多數OO語言大不相同,您可以在其中靜態定義this的值。

在您的示例中,each的jQuery文檔指出this將設置爲當前枚舉的元素。所以它應該是一個HTML表單元素。

這(沒有雙關語意)是JavaScript的一個非常混亂的方面,有寫關於它的互聯網,我建議你閱讀了很多。

請注意,您可以使用bind將函數內的this的值固定爲特定值,無論調用者如何。

1

在這種情況下,this反映了每個form元素,即選擇器匹配。

但從技術角度來看,它完全取決於each方法是如何實現的。

jquery的每個都是使用javascripts apply方法實現的,它允許手動定義在方法內部引用的內容(正如我所說的每個表單元素)。

0

不能回答是肯定的關於第一個問題,但我可以爲第二個:

這只是一個命名約定指定的JQuery對象沒有什麼特別之處在於,一看便知here,背後卻是一個Javascript反對

相關問題