$ 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)
填充$this
variables,所以你不必每次调用都要查找$(this)
元素。 它有更好的performance
var $this = $(this);
$this = $(this)
这意味着您将当前对象分配给名为$this
的variables。 这不是关键字。
这只是一个variables名称。
这很简单: $this = $(this)
。 这只是在内部函数范围内使用的简写。 美元符号在这种情况下只是一个字符,根本不涉及jQuery。 它也可能被命名为_this
或xthis
, $
只是提示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,以支持范围。