2009-08-17 8 views
3

私は最近、jQueryのchaningに関してfolloiwng質問求めてきました:人々の数は多分私は文の中で、連鎖の量を削減し、代わりに格納されているオブジェクトという提案と答えjQueryオブジェクトを変数に格納することは不利になることはありますか?

Is there a preferred way of formatting jQuery chains to make them more readable?

を変数を保持することに意味があります。

しかし、チェーン内のオブジェクトはすでに(並べ替えの)スタックに保持されているので、結果を変数にキャッシュして保存すると、メモリを使用して効果的に再格納することはできません。

投稿のコメントは、あまりにも多くのパフォーマンスヒット(もしあれば)がない可能性があると思われたので、もっと読みやすくするために提案されたようにキャッシュするのは喜ばしいことです。

また、キャッシングを使用している場合、.end().andSelf()の有用性が制限されますか?

答えて

8

オブジェクトは、一般に参照として格納されます - メモリ内の場所へのポインタ。両方とも同じオブジェクトを保持する2つの変数は、オブジェクトのすべてのデータを複製しません。実際のオブジェクトデータが配置されているメモリ内の同じ場所へのポインタを保持します。したがって、オブジェクトを変数に格納することは、パフォーマンスのヒットはまったくありません。何も重要​​ではない。

+0

興味深い。だから私は文字列に数値をキャストする - 文字列(数値)、これもリファレンスですか? –

+1

いいえ。文字列(123)はオブジェクトではなく文字列リテラルを返します。したがって、参照は必要ありません。 Stringオブジェクトが必要な場合は、 '123'という内容の新しいStringオブジェクトを作成するために、 'new String(123)'が必要です。 – Amber

+0

良い説明+1 – redsquare

5

@ Davの回答に加えて、変数にjqueryオブジェクトを格納することは良いことです。クラシック例:

$('#something div').each(function() { 
    $(this).css({'background-color':'#afa'}); 
    // do some stuff; 
    $(this).slideDown('fast'); 
} 

良い方法:あなたが$を呼び出すたび jqueryのオブジェクトを作成しないよう

$('#something div').each(function() { 
    var $this = $(this); 
    $this.css({'background-color':'#afa'}); 
    // do some stuff; 
    $this.slideDown('fast'); 
} 

この方法です。

関連する問題