JS对象创建——模块模式

本文介绍了模块模式的概念及其在JavaScript开发中的应用。通过创建命名空间、使用自执行函数、定义私有方法及依赖声明等手段,实现了代码解耦。并探讨了模块模式的优化方案,包括方法封装和使用构造函数创建模块对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模块模式

模块模式在开发中广泛使用,有助于代码解耦,该模式主要混合了以下几种特性:

  • 命名空间
  • 自执行函数
  • 私有方法
  • 依赖声明
1.首先创造一个命名空间:
let MAYAPP={};

2.第二步定义这个模块:
MYAPP.entity=(function(){
    let secondEntity=MYAPP.secondEntity,    //依赖声明 
        thirdEntity=MYAPP.thirdEntity;      
    
   //定义一些私有方法
   ....
   
   return {                         //返回公共接口
       eat:function(){
            ...调用私有方法...
            ...自己的逻辑...
       },
       
       sleep:function(){
           ...
       }
   } 
}())

3.以上4种特性混合便形成了模块模式.

4.以上的模块模式问题在于返回的方法可以被外界改写,并且在模块内部不能复用.因此我们还需要做些优化,将其封装之后再返回,如下所示:
MYAPP.entity=(function(){
    let secondEntity=MYAPP.secondEntity,    //依赖声明 
        thirdEntity=MYAPP.thirdEntity,      
    
    //定义一些私有方法
     eat=function(){
            ...调用私有方法...
            ...自己的逻辑...
      },
       
     sleep=function(){
           ...
      };
   return {                         
      eat:eat,
      sleep:sleep
   } 
}())

这样改进后,即使将MYAPP.entity.eat改写,模块内部其他部分调用eat时并不会受影响,而第一种方式会影响整个模块eat的调用.

另外一种常用的方式是返回构造函数创造模块对象,而不是直接返回对象字面量.如下所示:
MYAPP.entity=(function(){
    let secondEntity=MYAPP.secondEntity,    //依赖声明 
        thirdEntity=MYAPP.thirdEntity,      
    
    //定义一些私有方法
    conStr=function(num){
        this.rice=num;
        this.bed=num;
    };
    
    conStr.prototype={
        Constructor:MYAPP.entity,
        eat:function(){},
        sleep:function(){}
    }
    
    return conStr;
    
}())

let obj=new MYAPP.entity(num);   //这样该模块可配置性增强了
复制代码

转载于:https://juejin.im/post/5b9f74716fb9a05d2a1d5f18

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值