方法一 对象字面量表示法
在对象字面量表示法中,一个对象被描述为一组包含在大括号中,以逗号分隔的 name/value 对。对象内的名称可以是字符串或标识符,后面跟着一个冒号。对象中最后一个 name/value 对不加逗号,否则会出错。
/**
* 使用字面量表示法定义模块
*/
var myModule = {
myProperty: "someValue",
myConfig: {
useCaching: true,
language: "en"
},
myMethod: function () {
console.log("the first method");
},
myMethod2: function () {
console.log("the second method");
},
};
console.log(myModule.myProperty); // someValue
console.log(myModule.myConfig); // {useCaching: true, language: 'en'}
console.log(myModule.myConfig.useCaching); // true
myModule.myMethod(); // the first method
myModule.myMethod2(); // the second method
方法二 Module模式
Module模式使用闭包封装“私有”状态和组织。它提供了一种包装混合公有/私有方法和变量的方式
,防止其污染全局命名空间,防止其泄露到全局作用域。通过该模式,只需返回一个公有API,而其他的一切则都维持在私有闭包里。
/**
* Module方法定义
*/
var myNameSpace = (function () {
// 私有变量
var myPrivateVar = 0;
// 私有函数
var myPrivateMethod = function (foo) {
console.log(foo);
};
// 公有API
return {
// 公有变量
myPublicVar: "foo",
// 公有方法
myPublicFunction: function (bar) {
// 操作私有变量
myPrivateVar ++;
// 调用私有函数
myPrivateMethod(bar);
},
// 公有方法二
myPublicFunction2: function () {
console.log("success");
}
};
}) ();
console.log(myNameSpace.myPrivateVar); // undefined
console.log(myNameSpace.myPrivateVar); // undefined
console.log(myNameSpace.myPublicVar); // foo
console.log(myNameSpace.myPublicFunction); // Function
myNameSpace.myPublicFunction2(); // success
myNameSpace.myPublicFunction("i am first"); // i am first