jQuery $ this против $ (this) в разработке плагинов - PullRequest
8 голосов
/ 21 июля 2009

Мне было интересно, почему во многих плагинах jquery $ (this) устанавливается для указания на $ this, вот пример, если у меня на странице есть два следующих плагина:

(function($) {
   jQuery.fn.pluginOne = function() {
      return this.each(function() {
         $this = $(this); <--
         alert($this);
      });
   };
})(jQuery)

(function($) {
   jQuery.fn.pluginTwo = function() {
      return this.each(function() {
         $this = $(this); <--
         alert($this);
      });
   };
})(jQuery)

Когда я называю оба плагина готовыми:

$(document).ready({
   $('.myClass').pluginOne();
   $('.myOtherClass').pluginTwo();
});

Первый плагин получит $ this от второго плагина ... пока я указываю $ (this) на локальную переменную:

(function($) {
   jQuery.fn.pluginTwo = function() {
      return this.each(function() {
         var trigger = $(this); <--
         alert(trigger);
      });
   };
})(jQuery)

все работает на нем должно, конечно ...

Итак, мой вопрос ... когда я должен использовать $ this?

Спасибо

Ответы [ 3 ]

12 голосов
/ 21 июля 2009

$ - это стандартная программа для кэширования фактического объекта jQuery $ (this) в переменной.

Вы можете называть это как хотите, некоторые люди любят называть это $ self.

* 1005 например *

var $self = $(this)

Просто помогает, когда вы смотрите на код, распознать, что это объект jQuery, а не обычный объект dom.

Это работает лучше, поскольку вы создаете только один экземпляр переменной jQuery.

9 голосов
/ 21 июля 2009

$ является допустимым символом для имен переменных и функций в Javascript. Это может сбить с толку, если вы пришли из PHP, где $ используется только для обозначения переменной (мне потребовалось время, чтобы понять).

  • В jQuery $ - это псевдоним для функции jQuery, которая является основной функцией, выполняющей выбор DOM. $("#header ul.menu") совпадает с jQuery("#header ul.menu"). $ просто используется для краткости.

  • this - это специальный термин в Javascript (не jQ), означающий текущий элемент (в формах, которые вы можете увидеть, например, this.submit()).

  • $(this) означает «вызов функции jQuery с помощью Javascript this».

  • $this - это просто переменная, поскольку $ является допустимым символом. Вы можете установить $this на любое значение, которое вам нравится, и оно совершенно не связано с this в Javascript. В общем, я бы предложил НЕ использовать $ для имен переменных, чтобы избежать путаницы с функцией jQuery. Однако может быть полезно использовать $var для обозначения объектов jQuery, в отличие от обычных переменных Javascript.

2 голосов
/ 21 июля 2009

если вы выполняете несколько различных команд с элементом, заключенным в объект jQuery, то более эффективно получить элемент (как упакованный набор) только один раз и сохранить его в локальной переменной

var $this = $(this);
// then use $this in your function. 

Обратите внимание на использование var для локального охвата $this

...