ビリー月は良いスタートを示しているが、オブジェクトリテラルを使用しての問題は、あなたが参照他のフィールド/機能/性質を渡ることができないということです。
私はずっと暴露のモジュールのパターンが内部プライベート関数/フィールドを提供するために、クロージャの(種類の)搾取、自己実行中の関数を組み合わせて、あなたがすることができます
(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
が、含まれていることがわかります。また、私はpublicフィールドを公開しており、関数などで使用/参照できるいくつかのパラメータを受け入れています(何も渡されなければデフォルトに設定できます)
は次のように使用できます:
私はこれを好き
namespacedObject.toggleComments();
alert(namespacedObject.somePublicField);
alert(namespacedObject.somePrivateField); //undefined - it's private of course!
一つの理由はそれだけで便利です自己実行機能
・ホープから返されたオブジェクトリテラルをちらっと見てプライベート/パブリックであるかを確認することは非常に簡単だということです