ビリームーンは良いスタートを示していますが、オブジェクトリテラルを使用する際の問題は、他のフィールド/関数/プロパティを相互参照できないことです。
私は明らかにモジュールパターンを好みます(http://www.wait-till-i.com/2007/08/22/again-with-the-module-pattern-reveal-something-to-the-world/を参照)
明らかにするモジュールパターンは、自己実行機能、クロージャーの(一種の)活用を組み合わせて内部プライベート関数/フィールドを提供し、params を渡して名前空間付きオブジェクトを初期化できるようにします。
var namespacedObject = function(param) {
var settings = param || someDefaultSetting, //default if no param supplied
somePrivateField = "someValue",
somePublicField = "i'm public";
//define some method we will later make public
function toggleComments(){
$("comments-section").hide();
$("comments-button").click(function (){
$(this).value= somePrivateField;
return false;
});
}
//this is where the magic happens,
//return object with all public fields/functions
return {
toggleComments : toggleComments,
somePublicField : somePublicField
};
}(someParam);
名前空間付きのオブジェクトには、somePrivateField
公開されているメソッドから参照できるプライベート フィールドが含まれていることがわかります。また、パブリックフィールドを公開し、関数などで使用/参照できるいくつかのパラメーターを受け入れたことに注意してください (何も渡されない場合は、デフォルトにデフォルト設定できます.
次のように使用できます。
namespacedObject.toggleComments();
alert(namespacedObject.somePublicField);
alert(namespacedObject.somePrivateField); //undefined - it's private of course!
私がこれを気に入っている理由の 1 つは、自己実行関数から返されたオブジェクト リテラルをちらりと見るだけで、何がパブリックかプライベートかを簡単に確認できることです。
お役に立てば幸いです