0

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

但是,由于嵌套的匿名函数,我对下面代码示例中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');

...

函数的对象(指的是this)是 Drupal.behaviors.ajaxPoll 吗?

另外,我明白写 $form 和写 jQueryform 基本一样。在变量名称中使用 $ 符号的逻辑是什么?

4

3 回答 3

1

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

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

这(不是双关语)是 javascript 的一个非常令人困惑的方面,互联网上有很多关于它的文章,我鼓励你阅读。

请注意,您可以将this函数内部的值固定为特定值,无论调用者如何,使用bind.

于 2013-08-01T11:03:49.900 回答
1

在这种情况下,指的是选择器匹配的this每个form元素。

但从技术角度来看,这完全取决于each方法是如何实现的。

jquery 的 each 是使用 javascriptsapply方法实现的,该方法允许手动定义this方法内部引用的内容(正如我所说的每个表单元素)。

于 2013-08-01T11:04:25.523 回答
0

第一个问题不能肯定回答,但我可以回答第二个问题:

指定 JQuery 对象只是一个命名约定,对此没什么特别的,请参见此处的答案,其背后是一个 Javascript 对象

于 2013-08-01T11:06:06.957 回答