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

Я не лучший в 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" и почему бы не использовать одно или другое все время?

Ответы

Ответ 1

Как правило, это означает копию 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
    });
};

Ответ 2

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

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

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

$this.each(function(){
    // Do Something
});

Ответ 3

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

Ответ 4

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

Ответ 5

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

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

Ответ 6

В действительности jQuery является оберткой вокруг DOM JavaScript, улучшая и упрощая ее. Вкратце селектора JQuery возвращают объект JQuery/s i.e.

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

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

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

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