作为一个新手程序员,在编程时一定要刻意锻炼自己的模块化编写思路,但是究竟什么才是模块化编写对于新人来说还是不太能够直观的理解,下面就举个简单的例子来说明一下

概念:最早接触模块化的说法是从java上,所谓模块化就是将需要用到的方法封装成为一个模块,哪里需要直接调用即可,比如你需要计算1+1和2+2,那么你只需要调用a+b的方法即可,无需反复重写,但是由于js并不支持类的继承,因此如何封装和调用方法就成为js模块化的重要思路。

最简单的方式:

function sum(a,b){
alert(a+b);
}
function sub(a,b){
alert(a-b);
}
sum(1,1);
sum(2,2);
sub(11,1);

上面的sum(),sub()分别都可以算作是一个模块,需要用的时候直接调用即可,但是这种做法的缺点很明显:"污染"了全局变量,无法保证不与其他模块发生变量名冲突,而且模块成员之间看不出直接关系。比如a,b是全局变量同时方法中需要改变a,b值的时候。

因此大多时候我们都会将其采用对象的写法:

var Sum=new Object({
a:1,
b:2,
sum:function(){
alert(this.a-this.b);
}
});
Sum.sum();

上面的函数sum(),封装在Sum对象里。使用的时候,就是调用这个对象的属性。

Sum.sum();

但是,这样的写法会暴露所有模块成员,内部状态可以被外部改写,比如:

sum.a=2;

因此,在这个的基础上,我们可以采用立即执行函数写法:

 var Sum=(function(){
var a=1;
var b=2;
var sum=function(){
alert(a+b);
};
var sub=function(){
alert(a-b);
};
return {
sum:sum,
sub:sub
}
})();
alert(Sum.a);
Sum.sum();

第一个输出的Sum.a是undefind,外部是无法获取我们模块内部参数的,但是由于方法我们返回成为一个对象,因此是可以由外部调用的。

同时该模块还可以为其添加新的方法

Sum=(function () {

        m3 = function () {
alert("开始计算");
};
return {m3:m3}
})(Sum);
Sum.m3();

但是注意,这里不能直接调用Sum中的变量a,b,如果需要使用这些参数还需要重新赋予,关于解决方式大家有好的办法欢迎回复。

另外为了避免执行顺序等干扰造成程序报错,在添加方法时也可以写成

Sum=(function () {

        m3 = function () {
alert("im");
};
return {m3:m3}
})(window.Sum || {});

这样即使是空对象也可以添加成功。

以上就是简单的模块化封装思路,大家可以举一反三。

js中的模块化编写思维的更多相关文章

  1. html css <input> javaScript .数据类型 JS中的函数编写方式 BOM总结 DOM总结

    Day27  html css div 块标签. 特点: 独占一行,有高度和宽度 span 行元素. 特点:在同一行显示,当前行满了自动去下一行显示. 不识别高度和宽度 1.1.1.1 2.输入域标签 ...

  2. Node.js中的模块化

    每天一篇文章来记录记录自己的成长吧.大二,该静心了.加油~ 好了,废话不多说,今天说说nodejs中的模块化.(注:此文为自己对书nodejs实战的总结) nodejs一个重要的特性就是模块化,模块就 ...

  3. js中的模块化

    前阵子一直忙着找实习,发现已经有一段时间没写博客了,面试很多时候会被问到模块化,今天就让我们一起来总结下把 一.什么是模块化 在js出现的时候,js一般只是用来实现一些简单的交互,后来js开始得到重视 ...

  4. js中的面向对象入门

    什么是对象 我们先来看高程三中是如何对对象进行定义的 "无序属性的集合,其属性可以包括基本值.对象或者函数",对象是一组没有特定顺序的的值.对象的没个属性或方法都有一个俄名字,每个 ...

  5. JS中的原型继承机制

    转载 http://blog.csdn.net/niuyongjie/article/details/4810835 在学习JS的面向对象过程中,一直对constructor与prototype感到很 ...

  6. 关于JS中的constructor与prototype

    ======================================================================== 在学习JS的面向对象过程中,一直对constructo ...

  7. 【JavaScript】关于JS中的constructor与prototype

    最初对js中 object.constructor 的认识: 在学习JS的面向对象过程中,一直对constructor与prototype感到很迷惑,看了一些博客与书籍,觉得自己弄明白了,现在记录如下 ...

  8. Node.js学习(第一章:Node.js安装和模块化理解)

    Node.js安装和简单使用 安装方法 简单的安装方式是直接官网下载,然后本地安装即可.官网地址:nodejs.org Windows系统下,选择和系统版本匹配的.msi后缀的安装文件.Mac OS ...

  9. 【推荐】关于JS中的constructor与prototype【转】

    最初对js中 object.constructor 的认识: 在学习JS的面向对象过程中,一直对constructor与prototype感到很迷惑,看了一些博客与书籍,觉得自己弄明白了,现在记录如下 ...

随机推荐

  1. 图论(网络流):SCOI 2007 修车

    同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需要安排这M位技术人员所维修的车及顺序,使得顾客平均等待的时间最小 ...

  2. 【模拟】Codeforces 707A Brain's Photos

    题目链接: http://codeforces.com/problemset/problem/707/A 题目大意: 给一张N*M的图,只有六种颜色(如下),只含B,W,G的是黑白图,否则是彩色图.问 ...

  3. GPRS

    互动百科http://www.baike.com/wiki/GPRS 百度百科http://baike.baidu.com/link?url=M-ElL_qR1bwzUr7BdrDgN4EzBhYYJ ...

  4. kafka单机安装配置

    1.下载kafka wget https://www.apache.org/dyn/closer.cgi?path=/kafka/0.8.2.1/kafka_2.9.2-0.8.2.1.tgz 2.解 ...

  5. Lucene实例教程

    Lucene是apache组织的一个用java实现全文搜索引擎的开源项目. 其功能非常的强大,api也很简单.总得来说用Lucene来进行建立 和搜索和操作数据库是差不多的(有点像),Document ...

  6. vue.js学习笔记(一):什么是mvvm框架,vue.js的核心思想

    一:MVVM框架 MVVM框架的应用场景:  1.针对具有复杂交互逻辑的前端应用 2.提供基础的架构抽象 3.提供ajax数据持久化,保证前端用户体验 二:vue.js的核心思想 (一):数据驱动 ( ...

  7. 使用Linux的命令行工具做简单的文本分析

    Basic Text Analysis with Command Line Tools in Linux | William J Turkel 这篇文章非常清楚的介绍了如何使用Linux的命令行工具进 ...

  8. 常用的Linux操作一

    Linux 常用的操作必须明白. 1.ls  和ll 列出文件的目录. 2.tail -f XXX  查看文件. 3.chmod -R 777 XXX.jar 赋予权限 4.cat 查看文件 -n 对 ...

  9. Sql Server 2005 开发版亲測可用下载地址

    sqlserver2005开发版下载地址:http://222.132.81.146/rj/cs_sql_2005_dev_all_dvd.rar建议使用迅雷下载. sql server 2005 开 ...

  10. Solaris下怎样改动文件创建时间及查询

    Solaris下怎样改动文件创建时间及查询 实验演示: 1.核对时间 [root@S1011:/]# date Tue Jul 15 21:37:01 CDT 2014 --若时间不对请先按例如以下格 ...