当前位置: 移动技术网 > IT编程>开发语言>JavaScript > JavaScript模块模式实例详解

JavaScript模块模式实例详解

2017年12月12日  | 移动技术网IT编程  | 我要评论

本文实例讲述了javascript模块模式。分享给大家供大家参考,具体如下:

在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*的属性和方法是无法直接访问的。

基本模式扩展

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相关内容可查看本站专题:《javascript面向对象入门教程》、《javascript切换特效与技巧总结》、《javascript查找算法技巧总结》、《javascript错误与调试技巧总结》、《javascript数据结构与算法技巧总结》、《javascript遍历算法与技巧总结》及《javascript数学运算用法总结

希望本文所述对大家javascript程序设计有所帮助。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网