2011-12-29 18 views
2

What'tこのような書き込みjqueryの機能のポイント:jquery関数と通常のjavascript関数の違いは?

(function($) { 
    $.fn.simple_hide_function = function() { 
    var $t = this; 
    $t.hide(); 
    }; 
})(jQuery); 

$(window).load(function() { 
$('#myId').simple_hide_function(); 
}); 

なぜこのようにそれをしない:

function simple_hide_function(id){ 
id.hide(); 
}; 

$(window).load(function() { 
var my_id = $('#my_id'); 
simple_hide_function(my_id); 
}); 

追加の質問:

それは何の問題もやっているだろうこの?

function simple_hide_function(id){ 
id.hide(); 
}; 

$(window).load(function() { 
var my_id1 = $('#my_id1'), 
my_id2 = $('#my_id2'), 
my_id3 = $('#my_id3'); 
simple_hide_function(my_id1); 
simple_hide_function(my_id2); 
simple_hide_function(my_id3); 
}); 
+2

追加の質問:あなたのコードが読みにくいことに気をつけなければ、再利用し、維持してください。それは「悪い習慣」と呼ばれています。あなたがより良い、より良い開発者になれば、そのようなことをどうやってやればいいのか分かります。 – kapa

答えて

3

プラグインバージョンでは、新しい関数を作成してjQueryオブジェクトに追加します。関数をオブジェクトのメンバーにすることで、行内の同じオブジェクトに対して複数の関数が呼び出されるjQueryの連鎖のようなものを利用できます。

2番目のバージョンでは、グローバルスコープで関数を作成し、それにjQueryオブジェクトを渡します。これはグローバルな名前空間を汚染します(今は関数がどこにでも見えるようになりました)、それはjQueryの理念に沿ったものではありません。

しかし、見つけたとおり、機能的な違いはありません。両方とも正常に動作します。

+0

ありがとうInterrobang、私はあなたが意味するものを理解すると思います。ちょうど海岸を作るために、セカンド版のように何も悪いことはありませんか? – Hakan

+0

さて、あなたの2番目のバージョンでは、プラグインのバージョンと同じように '$( '#my_id1、#my_id2、#my_id3')のsimple_hide_function();を実行することはできません。 jQueryを使用して操作する場合は、jQueryプラグインを使用する必要があります。これがその要点です。 – Interrobang

0

私は、あなたがグローバルな名前空間を乱雑にしているのではないかと考えています。 2番目の例では、simple_hide_functionがウィンドウに属し、名前の競合を引き起こす可能性がありますが、最初の例ではローカル変数です。

+0

ありがとうございますjkeesh!私は質問を追加しました。これは "何かを混乱させる"だろうか? – Hakan

+0

2番目の例では、 'simple_hide_function'がウィンドウにスティルバインドされているので、グローバル名前空間も混乱します。上記の答えの一部は、jQueryプラグインを使用することの他の利点について説明しています。 – jkeesh

関連する問題