JavaScript模块模式详解:从基础到增强型实现

作者:青柠时间:2026-10-21 22:04:52浏览:628

本文深入解析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

以上为本文的全部内容,希望对读者学习有所帮助,欢迎继续支持本站。

作者最新文章