В чем причина 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.