使用$(test).stuff()和test.stuff()有什么区别,假设test=$('something'),是否有任何不使用$(test).stuff()的理由?

11

谷歌并没有帮助我解决这个问题。是否有任何理由不这样做:

var test = $('something');
$(test).stuff();

不要这样做:

var test = $('something');
test.stuff();

基本上,我发现当代码采用jQuery选择器格式时更易于阅读,尽管这并非必须。

两种方法似乎都可以正常工作。

谢谢!


谢谢大家的回答。我没有想到只需在对象变量前面添加美元符号即可。这使它足够突出,适合我使用 :) - Ryan Ewen
5个回答

12

首先的那个方法可能会明显地较慢,具体取决于对象的大小。如果你只使用它几次,那么差别不会太大,但如果你经常使用它,也许可以采用这种流行的命名方案:

如果一个变量包含一个 jQuery 对象,请在变量名称前加上 $。其他所有东西都按照通常的方式命名,而且不要使用 $ 命名任何不包含 jQuery 对象的变量。所以你应该这样写:

var $test = $('something');
$test.stuff();

如果你一直遵循同样的命名约定,这就清楚地表明test是一个jQuery对象。


事实上,每当您要多次使用相同的jQuery对象时,这是一个好习惯。这样可以缓存jQuery对象,而不是一遍又一遍地运行相同的jQuery方法来获取相同的jQuery对象。通常可以看到var $this = $(this);这种写法。 - Peter Ajtai
+1虽然我认为“稍微慢一点”这个说法相当主观。我看到的基准测试显示,按照你的建议可以获得12-15%的性能提升。 - AlienWebguy
@AlienWebGuy,你说得对。由于某种原因,我认为jQuery只返回它所传递的对象,但事实证明它会克隆整个对象,如果对象很大,这可能会非常昂贵。例如$($('*'));将克隆页面上的每个HTMLElement。我编辑了我的帖子,以使性能有了显着的差异。 - Paul

7

This is from the jQuery Docs:

Cloning jQuery Objects

When a jQuery object is passed to the $() function, a clone of the object is created. This new jQuery object references the same DOM elements as the initial one.

因此,jQuery的区别在于它正在创建传递给$()函数的jQuery对象的副本(这会产生一定量的额外开销)。
链接:http://api.jquery.com/jQuery/

5

+1 也给这个网站了,我怎么从来没听说过呢 :) - roberkules

4

如果你采用第一种方式,没有任何好处,反而会影响性能。这是因为你正在"重新使用jQuery"。我建议你按照以下方式编写代码:var $test = $('something'); 这样做非常清晰明了,变量是一个jQuery对象。


1

我不认为第一种方法是正确的,我认为一旦你声明了一个变量,它就只是那个名称。如果你想要类似的语法,你可以将变量声明为$test,然后没问题。


第一个可以运行,但它重新运行了不需要的代码。 - Bobby Borszich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接