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