var BaseComponent = {}; var application = function () { //私有变量和函数 var components = new Array(); //初始化 components.push(new BaseComponent()); //公共 return { getComponentCount: function () {//返回已注册的组件数 return components.length; }, registerComponent: function (component) {//注册新组件 if (typeof component == "object") { components.push(component); } } }; }();
在 web 程序中,经常需要使用一个单例来管理应用程序级的信息。这个例子创建了一个用于管理组件的 application 对象。首先声明一个私有 components 数组,然后为它添加了一个 BaseComponent 实例(BaseComponent 实际代码不重要,这里主要是为了演示初始化),返回的对象包含有权访问数组的特权方法。
如果创建一个对象时,需要对其进行初始化,同时还要公开一些能够访问这些私有数据的方法,那么就可以使用模块模式。
4. 增强的模块模式
这种模式适合那些单例必须是某种类型的实例,同时还必须添加某些属性或方法对其增强的情况:
var singleton = function(){ //私有变量 var privateVariable = 10; //私有函数 function privateFunction(){ return false; } //创建对象 var object = new CustomType(); //添加特权/公有方法和属性 object.publicProperty = true; object.publicMethod = function(){ privateVariable++; return privateFunction(); }; //返回这个对象 return object; }();
我们把之前的例子改成增强的模块模式:
var BaseComponent = {}; var application = function () { //私有变量和函数 var components = new Array(); //初始化 components.push(new BaseComponent()); //创建 application 的一个局部副本 var app = new BaseComponent(); //公共接口 app.getComponentCount = function () { return components.length; }; app.registerComponent = function (component) { if (typeof component == "object") { components.push(component); } }; //返回这个副本 return app; }();
更多关于JavaScript相关内容还可查看本站专题:《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》