$ 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代表了什么? 就在我想我已经想通了…

$this只是一个普通的variables。 $字符是variables名称中的有效字符,所以$this与其他非保留variables名称的作用相同。 它在function上与调用variablesJellyBean相同。

你通常使用var $this = $(this); 避免创build一个新的jQuery对象。 在下面的代码中,您只能创build一个对象而不是两个/四个。 这与连锁性完全无关。

你也可以把它叫做$thi$或其他的东西(不要用后者,这很丑陋:p),因为$就像是一个简单的JavaScript字符,就像az一样。

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

.each()this表示.lockDimensions被调用的jQuery对象。

.each() 里面它表示当前迭代的DOM对象。

通常,将$(this)存储在本地variables中的目的是为了防止您多次调用jQuery函数$() ,cachingjQuery,如果您必须多次使用它, this将有助于提高效率。

$是一个有效的variables名称字符,通常用来作为variables名称的第一个字符,以使程序员已经是jQuery对象(并且具有可用的关联方法/属性)。

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

你可能忽略了这一行:

 var $this = $(this); 

在这里, $this只是一个variables,它保存了$(this)的值。 您可以与$(this)交换使用它,并且您不会一遍又一遍地进行相同的查找。

$this只是一个局部variables,命名这种方式来提醒你$(this) 。 它节省了创buildjQuery版本的工作,你可以多次使用它。

$this只是jQuery包装的本地副本。

从长远来看,保留一个本地副本,而不是每次需要包装时都更有效率。

$this = $(this)是一种cachingjQuery对象的方法。 每次运行jQuery函数的代价都很高,因此存储输出结果可以让你重复使用select器,而无需再次调用jQuery函数。

它只是用$(this)填充$thisvariables,所以你不必每次调用都要查找$(this)元素。 它有更好的performance

 var $this = $(this); 
  $this = $(this) 

这意味着您将当前对象分配给名为$this的variables。 这不是关键字。

这只是一个variables名称。

这很简单: $this = $(this) 。 这只是在内部函数范围内使用的简写。 美元符号在这种情况下只是一个字符,根本不涉及jQuery。 它也可能被命名为_thisxthis$只是提示variables包含的内容。

这似乎毫无意义,但它消除了三个多余的方法调用( $()函数不是免费的),所以最有可能用于性能的原因。

$.fn.lockDimensions里面, this是有lockDimensions调用的jQuery对象。

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

通常在JavaScript中的variables名之前使用$符号来区分常规值和jQuery对象。 所以这里$this只是得到$(this)的值,它返回this jQuery对象。 $只是有效variables名称的一部分。

$this是一个名为$this的variables,其中包含对$(this)的引用。 IMO有点无意义。

我想跳入这里,即使我没有专家的jQuery技能。

无数次我看到类似于以下代码或概念的行:

 var $this = $(this); 

所以我重写它类似于:

 var $jims_this = $(this); 

并testing它。 我也这样做,以清除我可能有的任何困惑。

这是另一个类似的解释不好的代码的例子:

  <style> aa { font-weight: bold; } </style> 

接下来,将addClass调用添加到脚本中:

  $("a").addClass("a"); 

这确实有用,但是令人困惑。 它可以写成:

 <style> a.my_bold_class { font-weight: bold; } </style> $("a").addClass("my_bold_class"); 

吉姆

你已经进入了JavaScript范围和closures领域。

简短的回答:

 this.bar() 

是在foo的范围内执行的(因为这是指foo)

 var barf = this.bar; barf(); 

在全球范围内执行。

这个.bar基本上是指:

在this(foo)的作用域内执行this.bar所指向的函数。 当您将this.bar复制到barf并运行barf时。 Javascript理解为,运行barf指向的函数,并且因为没有这个,它只是在全局范围内运行。

要改正这一点,你可以改变

 barf(); 

像这样的东西:

 barf.apply(this); 

这告诉Javascript在执行它之前将这个范围绑定到barf。

对于jQuery的事件,你将需要使用匿名函数,或扩展在原型的绑定function,以支持范围。