在同一个函数中多次访问“$(this)”

时间:2012-08-01 23:38:18

标签: jquery

  

可能重复:
  Caching $(this) in jQuery is a best practice?

我很好奇,在同一个函数中,当多次调用$(this)时,是否会在后续调用中产生额外的开销来构造jQuery对象?换句话说,第一次调用它时是$(this)缓存了吗?如果没有,将$(this)存储在变量中并在随后需要$(this)时使用该变量会更好吗?

5 个答案:

答案 0 :(得分:4)

$()是jQuery构造函数。

this是对DOM调用元素的引用。

基本上,在$(this)中,您只是将this中的$()作为参数传递,以便您可以调用jQuery方法和函数。

http://www.learningjquery.com/2007/08/what-is-this

好的数字:http://jsperf.com/jquery-this-vs-this-vs-chain/2

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

javascript中的

this(通常)表示对调用当前函数的对象的引用。

通常,将$(this)存储在局部变量中的目的是阻止您多次调用jQuery函数$() ,缓存 jQueryized this应该有助于提高效率。

$只是一个有效的变量名字符,用作变量名通常的第一个字符,以便程序员将其作为jQuery对象排队(并且具有关联性)方法/属性可用)。

$this vs $(this) in jQuery

答案 1 :(得分:2)

我已经看到这种结构经常使用:

var someFunc = function () {
    var that = $(this);
    // you could also cache like var $this = $(this);

    // do stuff here...
};

每次拨打$()时,拨打电话都会有一些开销但不多。如果你没有缓存$(this),我认为这不会引起注意。见SO entry on jquery cache of $(this)

答案 2 :(得分:2)

每次计算表达式$(this)时,都会调用jQuery工厂函数,从而生成 new jQuery实例。但是,这个过程的性能损失可以忽略不计。我曾经计算过它只需要几微秒(百万分之一秒)。

我个人不担心在函数体中多次$(this)。缓存jQuery实例(var $this = $(this);)是一种选择,但我不这样做。 (与$this相比,我碰巧发现$( this )这个名字很丑陋,我知道大多数人在这里与我达成一致。)

答案 3 :(得分:2)

我做了一个快速测试,看看是否有使用$:

构建jQuery对象的额外开销
var start = (new Date).getTime();
for(var i=0; i<1000000; i++)
{
   var testClass = $("#testDiv").attr("class");
}
var end = (new Date).getTime();
alert(end-start);

我在这里所做的就是运行代码1,000,000次以查看将页面上的jQuery对象的类存储到变量所需的时间。花了大约4.286秒。然后我修改它以引用已存储的对象:

var start = (new Date).getTime();
var testDiv = $("#testDiv");
for(var i=0; i<1000000; i++)
{
   var testClass = testDiv.attr("class");
}
var end = (new Date).getTime();
alert(end-start);

这只花了1.254秒。虽然这不是您所要求的,但它确实强调生成jQuery对象的过程比从已生成的对象引用某些内容需要更多的时间。

尽管如此,大多数应用程序的差异可能会微不足道。

答案 4 :(得分:0)

当调用$(this)时,必须从已经实例化的对象中调用它。 $(this)只是对该对象的引用,因此,开销应该是最小的。

我可能是错的,但如果是这样,请纠正我。