`

JavaScript模块化开发(一)——基础知识

阅读更多

本文转载自原地址,感谢Feeldesign Studio的无私分享!

 

随着前端JavaScript代码越来越重,如何组织JavaScript代码变得非常重要,好的组织方式,可以让别人和自己很好的理解代码,也便于维护和测试。模块化是一种非常好的代码组织方式,本文试着对JavaScript模块化开发的一些基础知识做一些阐释。

对象字面量(Object Literals)

对象字面量表示,其实就是用一对大括号括起来的键值对,也就是JavaScript声明对象的方式。

var myObject = {
    variableKey : variableValue,
    functionKey : function() {
       //do Something
    }
}

比较一下下面代码声明方式,使用对象字面量表示,可以减少全局变量的污染,一般来说,强烈建议在任何时候都不要使用下面的声明方式

var variableName = ...;

function name1(){
    //do Something
}
function name2(){
    //do Something
}

立即执行函数(IIFE Immediately-Invoked Function Expressions)

立即执行函数是现在非常流行的写法,大部分JS库都使用了这种技巧,主要是防止全局变量的污染。

当我们在声明类似于 var name1 = function (){ … } 这样的函数时,在后面加一对括号 (),就可以让它立即执行,但是如果是 function name1() { … } 这样的函数,则会有问题:

function name1(){
    alert("123");
}();

上面代码在执行时会抛出错误,Unexpected token(意外的标记),因为后面的()会被解析为分组操作符

解决上面的问题,只需要加上括号将function代码全部括住即可,下面就是立即执行函数的声明方式:

(function () { /* code */ } ());
(function () { /* code */ })();

 注意,上面两种方式都是可以的,主要看个人习惯。立即执行函数可以不对外暴露私有变量,比如: 

var myObject = {
    name : "FeeldesignStudio",
    getName : function(){
        return this.name;
    }
};
myObject.name;       //FeeldesignStudio
myObject.getName();  //FeeldesignStudio

var myObject = (function(){
    var name = "FeeldesignStudio";
    return {
        getName : function(){
            return name;
        }
    }
})();

myObject.name;       //出错!
myObject.getName();  //FeeldesignStudio

导入全局变量

把全局变量作为参数传递给一个立即执行函数,这样就完成了全局变量的导入,立即执行函数中可以使用此全局变量的方法,并可以修改(简化)全局变量的名称:

var myModule = (function (jQ) {
    function method1(){
        jQ(".container").html("test");
    }

    return{
        publicMethod: function(){
            method1();
        }
    };
})( jQuery );

myModule.publicMethod();

模块导出

当然,有导入也可以有导出,有时我们不仅要导入全局变量,也要把模块导出到全局空间供其他模块使用。通过在立即执行函数中返回一个Object,就可以实现模块导出功能: 

var myModule = (function () {
  var module = {}, privateVariable = "Feeldesign";
  function privateMethod() {
    // ...
  }
  module.publicProperty = "FeeldesignStudio";
  module.publicMethod = function () {
    console.log( privateVariable );
  };
  return module;
})();

扩展模块

在开发中,我们经常会对一些模块进行扩展,扩展当然可以直接修改模块的源代码,但是这不是一个好的方法,比如我们要给 myModule 模块增加几个方法,通过前面的“立即执行函数”、“导入全局变量”、“模块导出”的知识,我们可以推导出下面的扩展方式:  

var myModule = (function(my) {
    my.xxMethod = function () {
        //do Something
    };
    return my;
})(myModule);
问题来了:上面的代码可以很好地对 myModule 进行扩展,不过前提是 myModule 必须已经定义,如果扩展的 xxMethod 方法和 myModule 本身没有任何的依赖,那么要求 myModule 必须已经定义就毫无必要了,怎么解决这个问题呢,非常简单,只需要或一个空对象:  
//松散扩展
var myModule = (function (my) {
    my.xxMethod = function () {
        //do Something
    };
    return my;
})( myModule || {} );
上述代码还存在一个问题,那就是如果a.js中声明了 var myModule = …,b.js中也声明了 var myModule = …,这样在引入a.js和b.js时,后者会将前者覆盖,这并不是我们期望的,所以对上述代码,可以再加改进 
(function (my) {
    my.xxMethod = function () {
        //do Something
    }
})( window.myModule = window.myModule || {} );
上面把JavaScript模块化开发的基础知识作了介绍,接下来,会进一步介绍常见的规范和针对这些规范的一些js库实现,通过这些js库,我们可以很好的将模块化开发赋予实施。 

 

分享到:
评论

相关推荐

    JavaScript动态网页开发详解——源文件

    《JavaScript动态网页开发详解》一书深入浅出地介绍了JavaScript这门语言的各个方面,旨在帮助开发者掌握创建高效、富有交互性的网页应用的技术。这本书共分为21章,涵盖了从基础到高级的JavaScript知识,包括但不...

    JavaScript凌厉开发——Ext JS3详解与实践

    《JavaScript凌厉开发——Ext JS3详解与实践》是一本深度探讨JavaScript库Ext JS3的专著,旨在帮助开发者深入理解和高效运用这一强大的前端框架。本文将围绕标题、描述及标签,详细介绍Ext JS3的核心概念、关键特性...

    《Web前端设计基础——HTML5、CSS3、JavaScript》课后答案整理.pdf

    根据提供的文件内容,我们可以整理出以下Web前端设计基础的知识点: 1. HTML5、CSS3、JavaScript概述 - HTML5是最新版本的超文本标记语言,用于创建网页的标准标记语言。它具有更快的访问速度、更好的搜索引擎优化...

    网页设计与开发——HTML、CSS、JavaScript实例教程

    网页设计与开发是数字时代的重要技能之一,涵盖了多种技术,如HTML、CSS和JavaScript,这三种语言构成了现代网页的基础。本实例教程旨在帮助初学者理解并掌握这些核心技术,通过实践来提升技能。 HTML(HyperText ...

    JavaScript前端开发程序设计教程(微课版)-教材代码.zip

    1. **JavaScript基础知识**:JavaScript是一种解释型的、弱类型的脚本语言,主要应用于网页和网络应用开发。它支持动态类型,即变量可以随时赋值不同类型的数据。JavaScript的基础包括变量声明(var, let, const)、...

    JavaScript网页开发体验式教程

    通过这本体验式教程,读者不仅可以学习到JavaScript的基础知识,还能通过实际操作加深理解,从而在网页开发中游刃有余。书中可能还包含一些实战项目,帮助读者将理论知识转化为实际技能,进一步提升开发能力。

    web学习笔记 —— javascript基础

    这篇“web学习笔记——javascript基础”将带你走进JavaScript的世界,理解其基本概念和常用语法。 JavaScript语法基础: 1. 变量:在JavaScript中,变量用于存储数据。声明变量使用`var`关键字,例如`var myVar = ...

    前端开发项目——美食天下

    【前端开发项目——美食天下】是一个专注于展示美食相关资讯与互动功能的网站前端开发实例。这个项目涵盖了前端开发中的多个重要知识点,旨在提供一个实际的、具有用户交互性的平台,让访客可以浏览美食信息、分享...

    javaScript全面分析——中文版

    JavaScript全面分析——中文版...通过本教程,你将系统地学习JavaScript的各个方面,从基础知识到高级特性,再到实际应用,从而成为一名合格的JavaScript开发者。不断实践和深入学习,你将在Web开发的世界里游刃有余。

    PHP实例开发源码——佰通一元夺宝系统源码 php版.zip

    最后,考虑到系统的可维护性和扩展性,源码应遵循良好的编程规范,如适当的注释、模块化设计和错误处理机制。这将有助于团队协作和未来的功能升级。 综上所述,这个"佰通一元夺宝系统源码 php版"不仅涵盖了PHP基础...

    ASP论坛网站实例开发源码——CWBP论坛门户插件实例开发.zip

    总之,ASP论坛网站实例开发源码——CWBP论坛门户插件实例为开发者提供了一个全面的学习平台,通过实际操作和修改源码,不仅可以巩固ASP技术基础,还能深入了解论坛系统的架构和设计原则,对于想要从事Web开发特别是...

    PHP实例开发源码——XOOPS v2.3.3 简体中文版 php管理系统.zip

    XOOPS作为一个PHP管理系统,它的设计和实现涉及到了诸如模板引擎、模块化开发、用户权限管理、内容发布、社区交互等功能,这些对于理解Web开发流程和PHP编程技巧具有重要意义。 在【标签】部分虽然为空,但我们可以...

    JavaScript实战手册——第七版代码

    《JavaScript实战手册——第七版代码》是一本专为JavaScript开发者准备的实践指南,它涵盖了从基础到高级的各种JavaScript编程技术。这本书的代码示例旨在帮助读者深入理解语言机制,并提升在实际项目中的应用能力。...

    ASP论坛网站实例开发源码——动态PHP文本论坛实例开发.rar

    【ASP论坛网站实例开发源码——动态PHP文本论坛实例开发.rar】这个压缩包提供了一个基于ASP语言的动态PHP文本论坛的实例源码,是开发者学习和研究ASP论坛构建的一个宝贵资源。下面将详细阐述该实例涉及的主要知识点...

    PHP实例开发源码——贝云cms内容管理系统 PHP版 v1.0.4.zip

    【描述】"PHP实例开发源码——贝云cms内容管理系统 PHP版 v1.0.4" 暗示了这个项目是一个实际开发案例,可以作为学习PHP开发、了解CMS架构或者进行二次开发的基础。源代码的提供意味着用户可以查看并理解系统的内部...

    验证“哥德巴赫猜想”——C语言代码

    **C语言基础知识点**: 1. **变量和数据类型**:在C语言中,我们需要先声明变量的类型,如`int`(整型)用于存储整数。例如,可能会有一个变量`num`用于存储待检查的偶数。 2. **循环结构**:代码可能会使用`for`...

    ASP论坛网站实例开发源码——社会化引擎(Social.Engine) v2.7.0 多模块 前台汉化版实例开发.zip

    ASP论坛网站实例开发源码——社会化引擎(Social.Engine) v2.7.0 是一个基于ASP技术构建的多模块社区平台,它提供了丰富的功能和高度的可定制性,旨在帮助开发者快速搭建自己的在线社区网站。这个版本是前台汉化版,...

    企业类ASP实例开发源码——广告企业网站源代码.zip

    9. **网站架构**:分析项目结构,了解一个企业级网站的组织方式,如何模块化和分层设计以提高可维护性和扩展性。 通过深入研究这个广告企业网站的ASP源代码,开发者不仅可以提升ASP编程技能,还能了解到如何将这些...

    JavaScript核心技术开发解密1

    书中涵盖了JavaScript的多个重要知识点,如内存管理、函数、执行上下文、闭包、面向对象编程以及模块化。这些内容都是JavaScript开发者必须理解和熟练运用的基础。在内存空间部分,读者将了解到JavaScript的基础数据...

    javascript 教程,较详细的讲述了javascript的基础知识

    本教程旨在提供一个全面的JavaScript基础知识概览,帮助初学者快速入门并深入理解其核心概念。 一、JavaScript概述 JavaScript最初由Brendan Eich在 Netscape Navigator 浏览器中开发,主要用作客户端脚本语言,...

Global site tag (gtag.js) - Google Analytics