JavaScript模块模式详解

本文主要介绍了javascript模块模式,结合实例形式详细分析了js模块模式的相关概念、功能、扩展等操作技巧,需要的朋友可以参考下,希望能帮助到大家。

在JS中没有Class的概念,那么如何体现Object的Public和Private属性呢,答案就是模块模式(Module Pattern)。

JS中有一个显著的特性: 匿名函数(anonymous function),通过匿名函数的建立和执行,匿名函数里的代码就形成了一个闭包(closure),从而形成,封装和控制一个对象的Private和Public的特性,避免了全局变量的泛滥和与其他脚本的冲突。

(function () {  // 所有的变量和函数只在这个范围内有效  // 仍然可以使用全局变量}());

登录后复制

经典的模块模式模板

var myNamespace = (function () { var myPrivateVar, myPrivateMethod; // A private counter variable myPrivateVar = 0; // A private function which logs any arguments myPrivateMethod = function( foo ) {   console.log( foo ); }; return {  // A public variable  myPublicVar: "foo",  // A public function utilizing privates  myPublicFunction: function( bar ) {   // Increment our private counter   myPrivateVar++;   // Call our private method using bar   myPrivateMethod( bar );  } };})();

登录后复制

通过闭包,可以看到,当我们使用myNamespace时,我们只能看到myPublic*的属性和方法,而myPrivate*的属性和方法是无法直接访问的。

立即学习“Java免费学习笔记(深入)”;

基本模式扩展

Import mixins

JS有一个重要特性叫隐式全局变量,也就是说无论什么时候,JS解释器都对一个变量寻找var声明,如果没有找到,就视为这个变量时全局变量。这样看起来在闭包中使用全局变量时很容易的事,但同时很容易造成代码的混乱。好在匿名函数也可以接收参数,这样通过参数传递,我们可以把想使用的全局变量import到匿名函数中,从而提供一个更清晰干净的使用方法。

(function ($, YAHOO) {  // 这样就可以访问jQuery (as $) 和 YAHOO 库}(jQuery, YAHOO));

登录后复制

Module exports

有时候不仅仅使用全局变量,而且也想声明一个自己的全局变量,这可以通过匿名函数的return value轻松实现。

var MODULE = (function () {  var my = {},    privateVariable = 1;  function privateMethod() {    // ...  }  my.moduleProperty = 1;  my.moduleMethod = function () {    // ...  };  return my;}());

登录后复制

高级扩展

基于上面的基本模式,我们可以继续扩展。

Augmentation

基本模块模式的限制是我们必须把整个模块放在一个file里,那么当需要把一个模块分散到多个文件时,怎么办呢?

一个号办法就是augment modules。我们首先输入module,然后增加属性方法,然后再输出。例子如下

var MODULE = (function (my) {  my.anotherMethod = function () {    // added method...  };  return my;}(MODULE));

登录后复制

Loose  Augmentation

上面的例子需要先有一个Module,然后在此基础上增加新的特性。但有的时候,我们异步加载JS脚本,这样就需要一个低耦合的模块建立方法, 通过如下结构便可实现。

var MODULE = (function (my) {  // add capabilities...  return my;}(MODULE || {}));

登录后复制

Sub-modules

可以基于Module建立Sub modules,这个非常简单,例子如下:

MODULE.sub = (function () {  var my = {};  // ...  return my;}());

登录后复制

至此,我们简单的介绍了模块模式,该模式作为最经典的JS模式,被各种JS框架广泛使用。它使得你的代码封装性更强,结构化更合理,更OOP。

相关推荐:

Javascript的一种模块模式_YUI.Ext相关

Javascript的一种模块模式_javascript技巧

如何能让js模块变得更好用

以上就是JavaScript模块模式详解的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2789953.html

(0)
上一篇 2025年3月8日 18:49:36
下一篇 2025年3月8日 18:49:43

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • javaScript封装的各种写法

    这篇文章主要介绍了javaScript封装的各种写法,通过列举优缺点和使用场景详细介绍了几种JavaScript封装的格式,对JavaScript的感兴趣朋友可以参考下本篇文章 在javascript的世界里,写法是个神奇的现象,真是百家齐…

    编程技术 2025年3月8日
    000
  • vue生成token保存在客户端中详解

    本文主要介绍了vue生成token保存在客户端localstorage中的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能帮助到大家。 前面我们已经了解了可以通过localStorage在客户端(浏览…

    2025年3月8日 编程技术
    200
  • AngularJS获取焦点及失去焦点时的表单验证功能实现方法

    本文主要介绍了angularjs实现的获取焦点及失去焦点时的表单验证功能,涉及angularjs使用ng-blur、ng-focus针对表单事件监听相关操作技巧,需要的朋友可以参考下,希望能帮助到大家。 本文实例讲述了AngularJS实现…

    2025年3月8日
    200
  • vue语法拼接字符串详解

    本文主要介绍了vue语法之拼接字符串的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能帮助到大家。 先来一行代码:    登录后复制 如代码所示,只需要在数组语法中拼接字符串即可。 ***知识点*…

    2025年3月8日
    200
  • Vue.nextTick 的实现方法详解

    本文主要介绍了vue.nexttick 的实现方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能帮助到大家。 这是一篇继event loop和MicroTask 后的vue.nextTick API实现…

    编程技术 2025年3月8日
    200
  • html、css、javascript实现楼层跳跃式的页面布局

    本文主要介绍了纯html+css+javascript实现楼层跳跃式的页面布局,需要的朋友可以参考下,希望能帮助到大家。 实现效果演示: 实现代码及注释: nbsp;html> 楼层跳跃式的页面布局   *{ margin: 0; p…

    2025年3月8日
    200
  • NodeJs数据库异常处理解析

    本文主要介绍了浅谈nodejs之数据库异常处理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能帮助到大家。 NodeJs版本:4.4.4 数据库链接错误 使用nodejs处理异常最麻烦不过,这里我抛开no…

    编程技术 2025年3月8日
    200
  • 在WebStorm中添加Vue.js单文件组件的高亮及语法支持实例

    本文主要介绍了详解在webstorm中添加vue.js单文件组件的高亮及语法支持,非常具有实用价值,需要的朋友可以参考下,希望能帮助到大家。 本文介绍了详解在WebStorm中添加Vue.js单文件组件的高亮及语法支持,分享给大家,具体如下…

    2025年3月8日
    200
  • Vue filter使用详解

    本文主要介绍了vue filter介绍及其使用详解,vuejs 提供了强大的过滤器api,能够对数据进行各种过滤处理。一起跟随小编过来看看吧,希望能帮助到大家。 VueJs 提供了强大的过滤器API,能够对数据进行各种过滤处理,返回需要的结…

    编程技术 2025年3月8日
    200
  • 完全掌握AngularJS中$location

    本文主要介绍了angularjs的$location使用方法详解的相关资料,希望通过本文大家能够掌握这部分内容,需要的朋友可以参考下,希望大家可以更好掌握angularjs中$location的使用方法。 AngularJS的$locati…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论