2011-02-07 10 views
1

私は今週末にウェブで次の記事を読んでいます。ほとんどの人がこれを正しい方法(より良い方法)と考えるかどうかを知りたかったのです。JavaScript匿名機能

これは、物事を行うための最善の(右)の方法ではありません。

 
$(document).ready(function() { 
    $('#magic').click(function(e) { 
     $('#yayeffects').slideUp(function() { 
      // ... 
     }); 
    }); 

    $('#happiness').load(url + ' #unicorns', function() { 
     // ... 
    }); 
}); 

これが優れていること:

 
var PI = { 
    onReady : function() { 
     $('#magic').click(PI.candyMtn); 
     $('#happiness').load(PI.url + ' #unicorns', PI.unicornCb); 
    }, 
    candyMtn : function(e) { 
     $('#yayeffects').slideUp(PI.slideCb); 
    }, 
    slideCb : function() { ... }, 
    unicornCb : function() { ... } 
}; 

$(document).ready(PI.onReady); 

1は、次のよりも良好に機能していますか?簡単にデバッグできますか?

思考?コメント?

+3

いくつかのこと:(1)これは、「BがAよりも優れていると言っている」と表現されています。あなたはどう思いますか?それは質問をロードする。 (2)あなたはなぜそれがそうであると言っても、第二のものがより良いと感じる理由を述べていない。 –

+0

FYIだけですが、それ以降のバージョンのjQuery ['$(function(){...})](http://api.jquery.com/jQuery/#jQuery3)は' $(document)と同じです。準備完了(関数(){...}) ' –

答えて

0

第2の亜種は再利用可能です。他のコントロールの他のイベントにslideCbや他のハンドラを再利用することができます。

1

匿名関数がたくさんあるスタックトレースを使用している場合、エラーがどこで発生したのか、どこから呼び出されたのかを確認するまでにかなりの時間がかかります。 1秒に1を加えます。

イベントハンドラ内のコードは、ハンドラが登録されるコードとあまり関係がないため、別の関数/モジュールに配置する必要があります。秒に1を加えます。

匿名の関数をリスナーに使用することは悪いです。このリスナー(ほとんどの人は気にしない)を削除する必要がある場合は、それらを削除するだけで他のリスナーのフォームを誤って削除することに気を付ける必要がないからですコードの他の部分。 2つ目は1です。

関連する関数を1つのオブジェクトに入れることは必ずしも最適ではありません。異なるdomオブジェクトに対してリスナーの動作を使用すると、ほとんどの場合、onReady関数が悪いです。

パフォーマンスについて気にしないでください。リスナーは通常、それが重要であると頻繁には呼ばれません。もしそうであれば、おそらく他のどこかに問題があります。

関連する問題