首页 > 其他分享 >模块

模块

时间:2022-10-10 14:02:29浏览次数:69  
标签:function anotherPublicFunction 模块 publicVar privateFunction var publicFunction

http://christianheilmann.com/2007/08/22/again-with-the-module-pattern-reveal-something-to-the-world/
模块模式
不久前,我还对JavaScript中的模块模式的美妙之处以及在调用或读取其他公共方法和属性的公共方法和特性时重复长名称空间时我对它感到的烦恼大加赞赏。

概括一下,“经典”模块模式意味着您将变量定义为一个匿名函数,然后立即用()调用该函数。定义私有函数和变量,并将公共变量和函数作为匿名对象的属性和方法返回:

var classicModulePattern = function(){
  var privateVar = 1;
  function privateFunction(){
    alert('private');
  }
  return {
    publicVar:2,
    publicFunction:function(){
      classicModulePattern.anotherPublicFunction();   
    },
    anotherPublicFunction:function(){
      privateFunction();
    }
  }
}();
classicModulePattern.publicFunction();

我的缺点是,当您想从另一个公共方法调用一个或访问公共变量时,需要重复主对象的名称。另一点我很恼火的是,对于你想公开的东西,不得不转换成对象文字符号。

受YUI上关于模块模式和pubstandards的博客帖子的启发,我开始提倡使用名为pub的命名对象在返回方法和属性之前向其附加方法和属性。这样,您可以通过pub调用公共方法。methodName快捷方式表示法,而不是重复主名称:

var namedObjectModulePattern = function(){
  var pub = {};
  var privateVar = 1;
  function privateFunction(){
    alert('private');
  };
  pub.publicVar = 2;
  pub.publicFunction = function(){
  pub.anotherPublicFunction();    
  };
  pub.anotherPublicFunction = function(){
    privateFunction();
  };
  return pub;
}();
namedObjectModulePattern.publicFunction();

还有另一个选项,我在此称之为“揭示模块模式”。在这种排列中,您只需在私有范围内定义所有函数和变量,并在模块末尾返回一个匿名对象,其中包含指向要公开的私有变量和函数的指针:

var revealingModulePattern = function(){
  var privateVar = 1;
  function privateFunction(){
    alert('private');
  };
  var publicVar = 2;
  function publicFunction(){
    anotherPublicFunction();    
  };
  function anotherPublicFunction(){
    privateFunction();
  };
  // reveal all things private by assigning public pointers
  return {
    publicFunction:publicFunction,
    publicVar:publicVar,
    anotherPublicFunction:anotherPublicFunction
  }
}();
revealingModulePattern.publicFunction();

这使整个脚本的语法保持一致,并在结尾处显示出哪些函数和变量可以公开访问。另一个好处是,如果您愿意,可以用其他更具体的名称显示私有功能。

var revealingModulePattern = function(){
  var privateVar = 1;
  function privateFunction(){
    alert('private');
  };
  var publicVar = 2;
  function publicFunction(){
    anotherPublicFunction();    
  };
  function anotherPublicFunction(){
    privateFunction();
  };
  // reveal all things private by assigning public pointers
  return {
    init:publicFunction,
    count:publicVar,
    increase:anotherPublicFunction
  }
}();
revealingModulePattern.init();

您甚至可以通过调用匿名对象中的函数来返回值作为公共属性:

var revealingModulePattern = function(){
  var privateVar = 1;
  function privateFunction(){
    alert('private');
  };
  var publicVar = 2;
  function publicFunction(){
    anotherPublicFunction();    
  };
  function anotherPublicFunction(){
    privateFunction();
  };
  function getCurrentState(){
    return 2;
  };
  // reveal all things private by assigning public pointers 通过分配公共指针显示所有私有内容
  return {
    init:publicFunction,
    count:publicVar,
    increase:anotherPublicFunction,
    current:getCurrentState()
  }
}();
alert(revealingModulePattern.current) 
// => 2
revealingModulePattern.init();

当然,这里的示例名称与我在真实脚本中使用的名称相差很远,但它显示了这种模式的强大功能。

标签:function,anotherPublicFunction,模块,publicVar,privateFunction,var,publicFunction
From: https://www.cnblogs.com/Running00/p/16775466.html

相关文章

  • ETCD Raft模块解析
    1.Raft简介raft是一个管理复制式日志的共识算法,它是通过复制日志的方式来保持状态机里的数据是最终一致的。 整体的一个运行描述图:  从图中可以看到由几部分组......
  • 【服务器数据恢复】多次断电导致ProLiant服务器RAID模块损坏的数据恢复案例
    服务器数据恢复环境:ProLiant某型号服务器;6块SAS硬盘组成RAID5;WINDOWSSERVER操作系统;存储企业部门内部文件。服务器故障&分析:出现几次意外断电后,故障服务器再次重启后......
  • JS模块化—CJS&AMD&CMD&ES6-前端面试知识点查漏补缺
    本文从以时间为轴从以下几个方面进行总结JS模块化。从无模块化=>IIFE=>CJS=>AMD=>CMD=>ES6=>webpack这几个阶段进行分析。历史幼年期:无模块化方式需要......
  • 由 粗 到 精 学 习 LVI-SAM:imageProjection模块
    一、LVI-SAM的节点关系运行LVI-SAM,并打开rqt_graph,查看节点关系如图所示:激光雷达原始数据的topic为/points_raw,观察发现它仅被imageProjection节点订阅,因此我们分析这个节点......
  • 如何屏蔽掉SpringBoot项目中自己不想使用的模块
    最近在修改离职同事几年前的代码,没有文档,向正常启动跑个单元测试都困难。比如我这次想测试一下我写的查询,结果单元测试运行的时候就提示Mailserverisnotavailable,当......
  • 详解vue-element-admin之模块化Vuex
    最近项目要储备vue-element-admin,于是吧官方的demo拿来研究了一段时间~在这段期间内完成了一个自制的小项目,近期会上线(vue-element-admin后台+uniapp制作的小程序),请期待~......
  • 模块联邦
    一、模块联邦概述ModuleFederation即为模块联邦,是Webpack5中新增的功能。可以实现跨应用共享模块,如图所示:2.准备实现以下应用3.应用的结构如图所示:4.切换到prod......
  • 前端模块化发展
    前端模块化的发展 CommonJS的模块化实现 但是应用到项目中需要node技术支持解析 ES6的模块化实现模块化概述Javascript模块化编程,已经成为一个迫切的需求。理想情况下,开......
  • 驱动开发:内核取ntoskrnl模块基地址
    模块是程序加载时被动态装载的,模块在装载后其存在于内存中同样存在一个内存基址,当我们需要操作这个模块时,通常第一步就是要得到该模块的内存基址,模块分为用户模块和内核模块......
  • python的OS模块学习笔记-1
    OS模块是python和操作系统进行交互的一个接口,它提供许多操作文件及文件夹的函数。1,通过getcwd()函数获取当前文件所在路径。importospath=os.getcwd()print(path)......