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