在这个jquery代码示例中'this'指的是什么?

时间:2013-08-01 10:57:48

标签: jquery

此处http://www.quirksmode.org/js/this.html它表示“在JavaScript中始终指向我们正在执行的函数的”所有者“,或者更确切地说,指向函数是方法的对象的。“

但是,由于嵌套的匿名函数,我在下面的代码示例中引用 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?

另外,我已经明白写$ form与编写jQueryform基本相同。在变量名中使用$ -sign的逻辑是什么?

3 个答案:

答案 0 :(得分:1)

在javascript中,this是动态的。根据函数的调用位置和方式,它可以采用不同的值。这与您可能知道的大多数OO语言非常不同,您可以静态定义this的值。

在您的示例中,each的jQuery文档声明this将设置为当前枚举的元素。所以它应该是一个HTML表单元素。

这个(没有双关语)是javascript的一个非常混乱的方面,在互联网上有很多关于它的文章,我鼓励你阅读。

请注意,您可以使用this将函数内的bind值固定为特定值,无论调用者是什么。

答案 1 :(得分:1)

在这种情况下,this引用每个form元素,选择器匹配。

但从技术角度来看,它完全取决于each方法的实施方式。

jquery的每一个都是使用javascripts apply方法实现的,它允许手动定义this在方法中引用的内容(就像我说的每个表单元素一样)。

答案 2 :(得分:0)

在第一个问题上无法肯定回答,但我可以在第二个问题上回答:

这只是一个命名约定,指定JQuery对象没有什么特别之处,请参阅答案here,它背后是一个Javascript对象