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

概念:最早接触模块化的说法是从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. 【转】android中重复连接ble设备导致的连接后直接返回STATE_DISCONNECTED的解决办法---不错不错,重新连接需要花费很长的时间

    原文网址:http://bbs.eeworld.com.cn/thread-438571-1-1.html /*                         * 通过使用if(gatt==null ...

  2. js标题文字向上滚动

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...

  3. UNIX编程之冲洗内存流与null追加策略(APUE F5-15)

    博文链接:http://haoyuanliu.github.io/2016/04/29/mysql/ 对,我是来骗访问量的!O(∩_∩)O~~ 最近一直在拜读APUE(Advanced Program ...

  4. crowd在更改IP后无法登录的问题

    org.codehaus.xfire.fault.XFireFault: Client with address "192.168.1.222", and hostname &qu ...

  5. 2015湖南省选集训DAY5——work(BZOJ4177)

    Description Mike有一个农场,这个农场n个牲畜围栏,如今他想在每一个牲畜围栏中养一仅仅动物,每仅仅动物能够是牛或羊,并且每一个牲畜围栏中的饲养条件都不同,当中第i个牲畜围栏中的动物长大后 ...

  6. Oracle MERGE INTO的使用方法

    非常多时候我们会出现例如以下情境,假设一条数据在表中已经存在,对其做update,假设不存在,将新的数据插入.假设不使用Oracle提供的merge语法的话,可能先要上数据库select查询一下看是否 ...

  7. Project Euler problem 63

    这题略水啊 首先观察一下. 10 ^ x次方肯定是x + 1位的 所以底数肯定小于10的 那么我们就枚举1~9为底数 然后枚举幂级数就行了,直至不满足题目中的条件即可break cnt = 0 for ...

  8. undo损坏故障恢复(二)ORA-01092,ORA-00604,ORA-01110

    undo 故障诊断与恢复(二) 今天是2013-09-01,目前困扰我将近一周的问题,终于解决了,我非常感谢帮助我的朋友,也非常感谢管我要钱然后替我解决问题的朋友(我没采用).这更激发了我一定要解决这 ...

  9. [Angular 2] Using ng-model for two-way binding

    Two-way binding still exists in Angular 2 and ng-model makes it simple. The syntax is a combination ...

  10. Python学习之四【变量】

    变量:用于引用(绑定)对象的标识符 语法: >>变量名=对象 (数值,表达式等) 如计算圆的面积 PI=3.14 redius:12.3 area=PI*radius**2(**在pyth ...