博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JS对象创建——模块模式
阅读量:6158 次
发布时间:2019-06-21

本文共 1427 字,大约阅读时间需要 4 分钟。

模块模式

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

  • 命名空间
  • 自执行函数
  • 私有方法
  • 依赖声明
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

你可能感兴趣的文章
给PowerShell脚本传递参数
查看>>
实战2——Hadoop的日志分析
查看>>
利用FIFO进行文件拷贝一例
查看>>
Ecshop安装过程中的的问题:cls_image::gd_version()和不支持JPEG
查看>>
resmgr:cpu quantum等待事件
查看>>
一个屌丝程序猿的人生(六十六)
查看>>
Java 编码 UTF-8
查看>>
SpringMVC实战(注解)
查看>>
关于静态属性和静态函数
查看>>
进程的基本属性:进程ID、父进程ID、进程组ID、会话和控制终端
查看>>
spring+jotm+ibatis+mysql实现JTA分布式事务
查看>>
MyBatis启动:MapperStatement创建
查看>>
调查问卷相关
查看>>
eclipse启动无响应,老是加载不了revert resources,或停留在Loading workbench状态
查看>>
1. Git-2.12.0-64-bit .exe下载
查看>>
怎样关闭“粘滞键”?
查看>>
[转]React 教程
查看>>
拓扑排序介绍
查看>>
eclipse打开工作空间(workspace)没有任务反应
查看>>
使用Sybmol模块来构建神经网络
查看>>