Javascript设计模式之Module(模块)模式
var myModule = { myProperty : "testValue", // 对象字面量可以包含属性和方法 myConfig : { useCaching : true, language : "en" }, // 基本方法 myMethod : function () { console.log("The name of this method is myMethod."); }, // 根据当前配置输出信息 myMethod2 : function () { console.log("Caching is:" + (this.myConfig.useCaching) ? "enabled" : "disabled"); }, // 重写当前配置 myMethod3 : function (newConfig) { if (typeof newConfig == "object") { this.myConfig = newConfig; console.log(this.myConfig.language); } }, }; myModule.myMethod(); myModule.myMethod2(); myModule.myMethod3({ language : "cn", useCaching : false });
使用对象字面量有助于封装和组织代码。
var myNamespace = (function () { // 私有变量 var myPrivateVar = 1; // 私有函数 var myPrivateMethod = function (text) { console.log(text); } return { // 公有变量 myPublicVar: "Hello JS", // 调用私用变量和私有方法的公有函数 myPublicMethod: function (name, age) { // 累加私有变量 myPrivateVar++; // 传入参数调用私有方法 myPrivateMethod("My name is " + name + "," + age + " years old this year"); } } })();
// 全局模块 var myModule = (function (JQ, _) { function privateMethod1(){ JQ('.container').html('test'); } function privateMethod2(){ console.log(_.min([300,2,100,78,45])); } return { publicMethod: function(){ privateMethod1(); } } })(); myModule.publicMethod();
function library(module){ $(function(){ if(!module.init){ module.init(); } }); } var myLibrary = library(function(){ return { init: function(){ //模块实现 } }; })();