В чем причина var $ this = this? - PullRequest
       11

В чем причина var $ this = this?

18 голосов
/ 29 августа 2011

Я не лучший в jquery, и я столкнулся с инициализацией var, которую я не знаю, почему человек, который написал код, сделал это таким образом.

В init для плагина мыесть

this.init = function(settings) {
    var $this = this;
    this.s = {
        initialSlide: 0,
        firstSlide: true,
    };
   ... more code, some uses $this, some uses "this"
}

Так в чем же разница между "$ this" и "this" и почему бы не использовать один или другой постоянно?

Ответы [ 6 ]

33 голосов
/ 29 августа 2011

Обычно это означает копию this.Особенность this в том, что она изменяется внутри каждой функции.Однако при таком хранении $this не изменяется, а this меняется.

jQuery интенсивно использует магическое значение this.

Рассмотрите этот код, где вам может понадобитьсячто-то похожее на то, что вы видите:

$.fn.doSomethingWithElements = function() {
    var $this = this;

    this.each(function() {
        // `this` refers to each element and differs each time this function
        //    is called
        //
        // `$this` refers to old `this`, i.e. the set of elements, and will be
        //    the same each time this function is called
    });
};
6 голосов
/ 29 августа 2011

В этом случае ничего. $this - это просто еще одно объявление переменной, которому назначено this.

Как правило, я видел этот ярлык, который используют люди, использующие библиотеки JavaScript при переносе this. Например, типичное использование в jQuery будет:

// rather than writing $(this) everywhere
var $this = $(this);

$this.each(function(){
    // Do Something
});
0 голосов
/ 18 июля 2016

На самом деле jQuery - это оболочка для JavaScript DOM, которая одновременно расширяет и упрощает его. Очень кратко селекторы JQuery возвращают JQuery Object / s, т.е.

var jQueryResults = $("article"); //Contains all article elements in the DOM as JQuery objects

Однако, выбор элементов с помощью Javascript возвращает элементы HTML DOM, т.е.

var normalResults = document.getElementsByTagName("article");//Contains all article elements in the DOM as HTML objects

Проблемы возникают из-за того, что объекты DOM не предоставляют такую ​​же функциональность, как объекты JQuery.

Вот пример события, которое иллюстрирует разницу:

$('.changeColorHover').hover(function() {
    this.attr("style", "color:red");
}); //Will not work as we are trying to call a JQuery method on a DOM object

С учетом вышесказанного ключевое слово this является объектом DOM, поэтому вам необходимо преобразовать его в объект jQuery, чтобы использовать методы jQuery.

 $('.changeColorHover').hover(function() {
        $(this).attr("style", "color:red");
 }); //Will work since we have first converted the DOM object to a JQuery object

Подводя итог, ключевое слово this позволяет получить доступ к объекту, вызвавшему событие, поскольку это даст ссылку на объект, вызвавший событие. Но это объект DOM, а не объект jQuery. В результате любой из методов jQuery, которые вы хотели бы использовать, недоступен, если вы не преобразуете его в объект jQuery.

0 голосов
/ 19 июня 2013

Я делаю $ this = $ (this), потому что кажется, что это сохранит фактическую обработку этого вызова каждый раз, когда вы захотите его использовать.

Кроме того, для функции 'magic' this '', которую кто-то упомянул. Удобно хранить оригинальную копию.

0 голосов
/ 29 августа 2011

Как и все остальные, в коде jquery есть идиома префиксирования объектов jquery с помощью $.я не знаю, насколько он популярен, но раньше видел его много.

0 голосов
/ 29 августа 2011

Это ничего не значит в этом случае (не каламбур).Было бы более логично, если бы оператор был var $this = $(this), так как это позволило бы использовать все функциональные возможности jQuery.

...