$this вместо $(this) в jQuery
Я видел некоторые дискуссии на так относительно $(this)
vs $this
в jQuery, и они имеют смысл для меня. (См. обсуждение здесь для примера.)
но как насчет фрагмента ниже, из учебника плагина веб-сайта jQuery, показывающего, как работает цепочка?
(function ($) {
$.fn.lockDimensions = function (type) {
return this.each(function () {
var $this = $(this);
if (!type || type == 'width') {
$this.width($this.width());
}
if (!type || type == 'height') {
$this.height($this.height());
}
});
};
})(jQuery);
что значит $this
представляют? Как раз тогда, когда я думаю, что все понял ...
15 ответов:
$this
Это просто обычная переменная. Элемент$
символ является допустимым символом в имени переменной, так$this
действует так же, как и любое другое незарезервированное имя переменной. Это функционально идентично вызову переменнойJellyBean
.
вы обычно используете
var $this = $(this);
чтобы избежать создания нового объекта jQuery чаще, чем это необходимо. В случае кода ниже вы создаете только один объект вместо двух / четырех. Это совершенно не связано с цепью.вы также можете назвать его
that
,$thi$
или что-нибудь еще (не используйте последний, хотя это некрасиво :p) как$
это просто простой символ в JavaScript, точно так же, как a-z являются.
this
в javascript (обычно) представляет собой ссылку на объект, который вызвал текущую функцию. Это понятие несколько fuzzied немного попытками в jQuery, чтобы сделать использованиеthis
более удобный в их.each()
циклическую структуру.за пределами the
.each()
,this
представляет объект jQuery, который.lockDimensions
вызывается от.внутри the
.each()
Он представляет текущий итерированный объект DOM.вообще цель хранить
$(this)
в локальной переменной, чтобы предотвратить вызов функции jQuery$()
несколько раз, кэширование a jQueryizedthis
должны помочь эффективность, если вы должны использовать его несколько раз.
$
является просто допустимым символом имени переменной и используется в качестве первый символ имени переменной обычно чтобы поставить в очередь программиста, что это уже объект jQuery(и имеет связанные методы/свойства).этот вопрос фактически не связан с цепной способностью, но для поддержания цепной способности вы должны вернуть
this
Так что другие функции могут быть добавлены, и поддерживать значениеthis
и в этих звонках тоже.
возможно, вы пропустили эту строку:
var $this = $(this);
здесь
$this
- это просто переменная, которая содержит значение$(this)
. Вы можете использовать его взаимозаменяемо с$(this)
С тем преимуществом, что вы не делаете один и тот же поиск снова и снова.
$this
Это просто локальная переменная, названная таким образом, чтобы напомнить вам о$(this)
. Это экономит работу по созданию jQuery версииthis
, и вы можете использовать его несколько раз.
$this
- Это просто локальная копияthis
завернутый в jQuery.в долгосрочной перспективе, сохраняя локальную копию, а не накрутка
this
каждый раз, когда это необходимо, намного эффективнее.
$this = $(this)
- Это способ кэширования объекта jQuery. Каждый раз запускать функцию jQuery дорого, поэтому сохранение выходных данных позволяет повторно использовать селектор снова и снова без повторного вызова функции jQuery.
Он просто заполняет
$this
переменной с$(this)
, Так что вам не придется искать$(this)
элемент каждого вызова. Он имеет лучшую производительностьvar $this = $(this);
$this = $(this)
это означает, что вы присваиваете текущий объект переменной с именем
$this
. Это не ключевое слово.Это просто имя переменной.
Это довольно просто:
$this = $(this)
. Это просто стенография, используемая в области внутренней функции. Знак доллара-это просто символ в этом случае, он вообще не относится к jQuery. С таким же успехом его можно было бы назвать_this
илиxthis
на$
- это просто напоминание о том, что переменная содержит.это может показаться бессмысленным, но он устраняет три избыточных вызова метода (
$()
функция не бесплатна), поэтому она, скорее всего, используется там для производительности причины.
внутри
$.fn.lockDimensions
,this
- это объект jQuery, который имелlockDimensions
призвал он.внутри
.each
,this
теперь ссылается на элемент DOMElement в текущей итерации цикла.$(this)
обертывает элемент DOMElement в объект jQuery иvar $this = $(this);
это просто спасение$(this)
в переменной с именем$this
, поэтому конструктор jQuery не нужно вызывать несколько раз (если вы должны были использовать$(this)
вместо).
$
знак обычно используется перед именами переменных в JavaScript, чтобы различать общее значение и объект jQuery. Так вот$this
просто получает значение$(this)
который возвращает jQuery объектthis
.$
- Это только часть допустимое имя переменной.
Я хочу прыгнуть сюда, хотя у меня нет экспертных навыков jQuery.
бесчисленное количество раз я вижу строки кода или понятия, подобные:
var $this = $(this);
поэтому я делаю переписать его похожим на:
var $jims_this = $(this);
и проверить его. Также я делаю это, чтобы прояснить любую путаницу, которую я мог бы иметь.
вот еще один пример подобного плохо объясненного кода:
<style> a.a { font-weight: bold; } </style>
затем добавьте вызов addClass в свой скрипт:
$("a").addClass("a");
этот работает, но это сбивает с толку. Это можно было бы написать так:
<style> a.my_bold_class { font-weight: bold; } </style> $("a").addClass("my_bold_class");
Джим
вы забрели в область области javascript и закрытия.
ответ:
this.bar()
выполняется в рамках foo, (как это относится к foo)
var barf = this.bar; barf();
выполняется в глобальной области.
этого.бар в основном означает:
выполните функцию, на которую указывает это.бар, в рамках этого (foo). Когда вы скопировали это.бар блевать, блевать и бежать. Javascript понимается как, запустить функцию указал по блевотине, и поскольку этого нет, он просто работает в глобальном масштабе.
чтобы исправить это, вы можете изменить
barf();
что-то вроде этого:
barf.apply(this);
Это говорит Javascript, чтобы привязать область этого к barf перед его выполнением.
для событий jquery вам нужно будет использовать анонимную функцию или расширить функцию привязки в прототипе для поддержки области видимости.