在jQuery中$ this vs $(this)

lar*_*ryq 74 javascript jquery

我在jQuery 上看到了关于$(this)vs的一些关于vs的讨论$this,它们对我有意义.(有关示例,请参见此处讨论.)

但是下面的代码片段,来自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);
Run Code Online (Sandbox Code Playgroud)

$this上面代表什么?就在我认为我弄清楚的时候......

Joe*_*Joe 119

$this只是一个普通的变量.该$字符是变量名称中的有效字符,因此其$this作用与任何其他非保留变量名称相同.它在功能上与调用变量相同JellyBean.

  • 通常,当它们是jQuery对象时,您将其命名为$ vars,因此您记得它们是$而不是简单的JavaScript对象. (32认同)

Thi*_*ter 66

通常var $this = $(this);用来避免创建一个新的jQuery对象而不是必要的.如果是下面的代码,则只创建一个对象而不是两个/四个.它与可链接性完全无关.

你也可以调用它that,$thi$或其他任何东西(不要使用后者,但它很难看:p)因为$它只是一个简单的JavaScript字符,就像az一样.


jon*_*ohn 34

this在javascript(通常)表示对调用当前函数的对象的引用.这个概念有点模糊,jQuery尝试this.each()循环结构中使用更友好的用户.

.each(),this表示该jQuery对象.lockDimensions被调用.

内部.each()它代表当前迭代DOM对象.

通常,存储$(this)在局部变量中的目的是防止您$() 多次调用jQuery函数,如果必须多次使用它,缓存jQueryized this应该有助于提高效率.

$它只是一个有效的变量名字符,用作变量名的第一个字符,通常是为程序员排队它已经是一个jQuery对象(并且有相关的方法/属性可用).

这个问题实际上与链能力无关,但为了保持链能力,你应该返回,this以便可以添加其他函数调用,并保持this这些调用的含义.


eva*_*van 14

你可能忽略了这一行:

var $this = $(this);
Run Code Online (Sandbox Code Playgroud)

这里,$this只是一个包含值的变量$(this).您可以互换使用它,$(this)并且您不会反复进行相同的查找.


Ned*_*der 12

$this只是一个局部变量,以这种方式提醒你$(this).它节省了创建jQuery版本的工作this,并且您可以多次使用它.


Jus*_*ner 10

$this只是thisjQuery包装的本地副本.

从长远来看,保持本地副本而不是this每次需要包装都要高效得多.


Bil*_*oon 10

$this = $(this)是一种缓存jQuery对象的方法.每次运行jQuery函数都很昂贵,因此存储输出允许您一遍又一遍地重复使用选择器而无需再次调用jQuery函数.


gen*_*sis 9

它只是填充$this变量$(this),所以你不必$(this)每次调用都要查找元素.它有更好的性能

var $this = $(this);
Run Code Online (Sandbox Code Playgroud)


Sud*_*mar 9

 $this = $(this)
Run Code Online (Sandbox Code Playgroud)

这意味着您将当前对象分配给名为的变量$this.它不是关键字.

它只是一个变量名.


Jen*_*and 7

这很简单:$this = $(this).它只是内部函数范围内使用的简写.在这种情况下,美元符号只是一个字符,它根本不涉及jQuery.这或许也同样被命名_thisxthis中,$仅仅是一个什么样的变量包含提醒.

它可能看起来毫无意义,但它消除了三个冗余的方法调用($()函数不是免费的),因此出于性能原因最有可能使用它.


Roc*_*mat 7

在里面$.fn.lockDimensions,thislockDimensions调用它的jQuery对象.

在里面.each,this现在引用循环的当前迭代中的DOMElement. $(this)将DOMElement包装在一个jQuery对象中,var $this = $(this);只是保存$(this)一个名为的变量$this,因此不需要多次调用jQuery构造函数(如果你要使用它$(this)).


Muh*_*man 7

$sign通常在JavaScript中的变量名之前使用,以区分常规值和jQuery对象.所以这里$this只获取$(this)返回jQuery对象的值this.$只是有效变量名称的一部分.