比利月亮显示了一个良好的开端,但使用对象文字的问题是您不能交叉引用其他字段/函数/属性。
我更喜欢显示模块模式(参见http://www.wait-till-i.com/2007/08/22/again-with-the-module-pattern-reveal-something-to-the-world/)
揭示模块模式结合了一个自执行功能,利用(某种)闭包来提供内部私有函数/字段,并允许您传递参数来初始化您的命名空间对象。
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!
我喜欢这个的一个原因是,只要看一眼自执行函数返回的对象字面量,就很容易看出什么是公共/私有的
希望这会有所帮助