本文深入解析JavaScript中的模块模式,阐述其通过闭包创建私有变量与方法、减少全局污染的核心机制。重点介绍增强模块模式,演示如何在返回对象中注入现有类型实例并扩展公有接口,适用于需要特定类型实例且需动态增强功能的场景。
模块模式基础结构
前文通过单体模式介绍了基于对象字面量创建单例的方法,具体实现代码如下:
var singleMode = {
name: value,
method: function(){
}
};
模块模式的核心思想在于为单体模式引入私有变量和私有方法,从而有效降低全局变量的使用频率。其典型代码结构如下所示:
var singleMode = (function(){
// 创建私有变量
var privateNum = 112;
// 创建私有函数
function privateFunc(){
// 实现自己的业务逻辑代码
}
// 返回一个对象包含公有方法和属性
return {
publicMethod1: publicMethod1,
publicMethod2: publicMethod1
};
})();
模块模式利用一个返回对象的匿名函数来实现。在该函数内部,首先定义供内部使用的私有变量和函数;随后,返回一个仅包含公开属性和方法的对象字面量。这种设计使得外部可以调用这些公开接口,而返回对象中的公有方法由于定义在匿名函数内部,能够访问内部的私有变量和函数。
在实际开发中,何时应当采用模块模式?
当需要创建一个对象并进行数据初始化,同时必须公开一些能够访问这些私有数据的方法时,模块模式是合适的选择。
增强模块模式应用
接下来,我们将探讨增强的模块模式。
增强模块模式适用于单例必须是某种类型的实例,且需要添加特定属性或方法以增强该实例的情况。示例代码如下:
function CustomType() {
this.name = "tugenhua";
};
CustomType.prototype.getName = function(){
return this.name;
}
var application = (function(){
// 定义私有
var privateA = "aa";
// 定义私有函数
function A(){};
// 实例化一个对象后,返回该实例,然后为该实例增加一些公有属性和方法
var object = new CustomType();
// 添加公有属性
object.A = "aa";
// 添加公有方法
object.B = function(){
return privateA;
}
// 返回该对象
return object;
})();
下面我们对 application 对象进行打印输出,结果如下:
console.log(application);

继续打印该对象的公有属性和方法,输出如下:
console.log(application.A);// aa
console.log(application.B()); // aa
console.log(application.name); // tugenhua
console.log(application.getName());// tugenhua
以上为本文的全部内容,希望对读者学习有所帮助,欢迎继续支持本站。