`
yangyangmyself
  • 浏览: 232418 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Javascript模块化编程(模块)

 
阅读更多

网页越来越像桌面程序,需要一个团队分工协作、进度管理、单元测试等等......开发者不得不使用软件工程的方法,管理网页的业务逻辑。

Javascript模块化编程,已经成为一个迫切的需求。理想情况下,开发者只需要实现核心的业务逻辑,其他都可以加载别人已经写好的模块。

但是,Javascript不是一种模块化编程语言,它不支持""(class),更遑论"模块"(module)了。(正在制定中的ECMAScript标准第六版,将正式支持"类"和"模块",但还需要很长时间才能投入实用。)

Javascript社区做了很多努力,在现有的运行环境中,实现"模块"的效果。本文总结了当前"Javascript模块化编程"的最佳实践,说明如何投入实用。虽然这不是初级教程,但是只要稍稍了解Javascript的基本语法,就能看懂。

一、原始写法

模块就是实现特定功能的一组方法。

只要把不同的函数(以及记录状态的变量)简单地放在一起,就算是一个模块。

function m1(){
  //...
}

function m2(){
  //...
}

上面的函数m1()和m2(),组成一个模块。使用的时候,直接调用就行了。

这种做法的缺点很明显:"污染"了全局变量,无法保证不与其他模块发生变量名冲突,而且模块成员之间看不出直接关系。

二、对象写法

为了解决上面的缺点,可以把模块写成一个对象,所有的模块成员都放到这个对象里面。

var module1 = new Object({

  _count : 0,

  m1 : function (){
    //...
  },

  m2 : function (){
    //...
  }

});

上面的函数m1()和m2(),都封装在module1对象里。使用的时候,就是调用这个对象的属性。

module1.m1();

但是,这样的写法会暴露所有模块成员,内部状态可以被外部改写。比如,外部代码可以直接改变内部计数器的值。

module1._count = 5;

三、立即执行函数写法

使用"立即执行函数"(Immediately-Invoked Function Expression,IIFE),可以达到不暴露私有成员的目的。

var module1 = (function(){

  var _count = 0;

  var m1 = function(){
    //...
  };

  var m2 = function(){
    //...
  };

  return {
    m1 : m1,
    m2 : m2
  };

})();

使用上面的写法,外部代码无法读取内部的_count变量。

console.info(module1._count); //undefined

module1就是Javascript模块的基本写法。下面,再对这种写法进行加工。

四、放大模式

如果一个模块很大,必须分成几个部分,或者一个模块需要继承另一个模块,这时就有必要采用"放大模式"(augmentation)。

var module1 = (function (mod){

  mod.m3 = function () {
    //...
  };

  return mod;

})(module1);

上面的代码为module1模块添加了一个新方法m3(),然后返回新的module1模块。

五、宽放大模式(Loose augmentation)

在浏览器环境中,模块的各个部分通常都是从网上获取的,有时无法知道哪个部分会先加载。如果采用上一节的写法,第一个执行的部分有可能加载一个不存在空对象,这时就要采用"宽放大模式"。

var module1 = ( function (mod){

  //...

  return mod;

})(window.module1 || {});

与"放大模式"相比,"宽放大模式"就是"立即执行函数"的参数可以是空对象。

六、输入全局变量

独立性是模块的重要特点,模块内部最好不与程序的其他部分直接交互。

为了在模块内部调用全局变量,必须显式地将其他变量输入模块。

var module1 = (function ($, YAHOO) {

 //...

})(jQuery, YAHOO);

上面的module1模块需要使用jQuery库和YUI库,就把这两个库(其实是两个模块)当作参数输入module1。这样做除了保证模块的独立性,还使得模块之间的依赖关系变得明显。这方面更多的讨论,参见Ben Cherry的著名文章《JavaScript Module Pattern: In-Depth》

转载:http://www.ruanyifeng.com/blog/2012/10/javascript_module.html

0
1
分享到:
评论

相关推荐

    Javascript模块化编程

    ### JavaScript模块化编程知识点 #### 一、模块化的重要性 模块化编程是现代软件开发的基础之一,尤其是在JavaScript这种广泛应用于Web开发的语言中尤为重要。模块化的关键在于它允许开发者将复杂的程序拆分成更小...

    JavaScript模块化编程

    ### JavaScript模块化编程 #### 一、理解JavaScript模块化 ##### 1.1 模块化的概念 在软件工程中,模块化是一种重要的设计思想,指的是将复杂的系统分解成一系列独立的功能单元(即模块),每个模块负责实现系统...

    Javascript模块化编程(Require.js)

    JavaScript模块化编程是一种组织代码的方式,它使得代码更易于维护、重用和协作。Require.js是JavaScript的一个模块加载器,它引入了AMD(Asynchronous Module Definition)规范,为JavaScript提供了异步加载模块的...

    Javascript模块化编程详解

    JavaScript模块化编程是一种组织代码的方式,它使得代码更容易理解和维护。模块化编程通过将相关的功能封装起来,避免了全局变量的滥用,提高了代码的复用性。本文将深入讲解JavaScript模块化编程的基础和一些进阶...

    Javascript模块化编程(三):模块化编程实战,试用SeaJS

    JavaScript模块化编程是现代Web开发中的重要组成部分,它有助于组织代码、提高可维护性和复用性。本篇文章将深入探讨JavaScript模块化编程的实战应用,特别是通过试用SeaJS这一工具来实现。SeaJS是一款专注于浏览器...

    JavaScript模块化编程七日

    JavaScript模块化编程是现代Web开发中的关键组成部分,它允许开发者将复杂的代码结构组织成可重用、可维护的模块。在“JavaScript模块化编程七日”这个主题中,我们将深入探讨这一重要概念,涵盖从基本的模块化原理...

    论JavaScript模块化编程_.docx

    JavaScript模块化编程是解决代码组织和管理问题的关键技术,尤其对于大型项目而言,它能够确保代码的可维护性、可重用性和可扩展性。在JavaScript的传统开发模式中,全局变量的滥用、脚本依赖顺序的混乱以及大量脚本...

    Javascript模块化编程(二)AMD规范共3页.pd

    JavaScript模块化编程是现代Web开发中的重要组成部分,它使得代码组织更加有序,可维护性更强。AMD(Asynchronous Module Definition)规范是JavaScript模块化的一种实现方式,尤其在大型复杂项目中,AMD规范起到了...

    Javascript模块化编程(三)require.js的

    JavaScript模块化编程是现代Web开发中的重要组成部分,它使得代码组织更加有序,便于维护和复用。本篇将深入探讨require.js,一个广泛使用的JavaScript模块加载器和异步依赖管理库,尤其适用于大型项目的开发。 ...

    Modules02. JavaScript 模块化编程.pdf_前端学习资料

    JavaScript 模块化编程是解决日益复杂的前端项目管理和维护的关键技术。随着JavaScript在Web开发中的核心地位不断巩固,模块化成为了应对代码量增大、逻辑复杂度提高的有效手段。本文将深入探讨JavaScript模块化的...

    JavaScript:模块化编程与CommonJS教程

    CommonJS 是最早被广泛采用的一种JavaScript模块化编程规范,特别是在Node.js环境中。它定义了一套用于服务器端的模块加载规则。 - **require()函数**:用于加载其他模块。当一个模块通过`require()`函数加载时,该...

    javascript模块化

    ### JavaScript模块化详解 #### 一、模块化的背景与意义 在现代Web开发中,JavaScript作为客户端编程的主要语言,其重要性不言而喻。随着Web应用变得越来越复杂,单个脚本文件往往无法满足需求,这就导致了多个...

    Java 9 模块化编程英文版电子书.pdf

    Java 9模块化编程是Java 9引入的一项重大更新,它对Java平台进行了根本性的改变,允许开发者以模块化的方式组织和构建大型应用。模块化编程的主要目的是提高代码的可复用性、可维护性,以及增强系统的安全性。在Java...

    javascript模块化编程库require的用法.docx

    ### JavaScript模块化编程库Require.js的使用方法 #### 引言 随着Web应用的日益复杂,传统的JavaScript开发方式已无法满足高效开发与维护的需求。在这样的背景下,Require.js作为一种先进的JavaScript模块加载器,...

    Javascript模块化编程(一)模块的写法最佳实践

    Javascript模块化编程,已经成为一个迫切的需求。理想情况下,开发者只需要实现核心的业务逻辑,其他都可以加载别人已经写好的模块。 但是,Javascript不是一种模块化编程语言,它不支持”类”(class),更遑论”...

    JavaScript:模块化编程与CommonJS教程.docx

    JavaScript:模块化编程与CommonJS教程.docx

    JavaScript 模块化编程(笔记)

    ### JavaScript模块化编程知识点 #### 模块化编程概述 模块化编程是一种将复杂系统的不同部分组织为独立模块的方法。在JavaScript中,模块化可以带来代码复用、封装、依赖管理等诸多优点。JavaScript模块化编程允许...

Global site tag (gtag.js) - Google Analytics