$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 71

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. $ - Это только часть допустимое имя переменной.

$this - Это переменная с именем $this со ссылкой на $(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 вам нужно будет использовать анонимную функцию или расширить функцию привязки в прототипе для поддержки области видимости.