JavaScript模块化学习基础
http://www.ruanyifeng.com/blog/2012/10/javascript_module.html
一、原始写法
模块就是实现特定功能的一组方法。
不同函数简单放在一起就算一个模块
如:
function func1(){
//执行代码
}
function func2(){
//执行代码
}
上面函数func1和func2组成了一个模块,使用的时候直接调用即可;
缺点:污染全局变量,无法保证不与其他模块变量名发生冲突,而且模块之间看不出直接关系
二、对象写法
为了解决上面的缺点,可以把模块写成一个对象,所有模块成员放在对象里面。
如:
var module=new Object({
_count:0,
func1:function(){
//执行代码
},
func2:function(){
//执行代码
}
});
上面,func1和func2函数封装在module对象里,使用的时候就是调用这个对象的属性,如:module.func1();
缺点:这样的写法暴露了所有模块成员,内部状态可以被外部改写。比如,外部代码可以直接改变内部_count值,如:module._count=3;
三、立即执行函数写法
使用立即执行函数可以达到不暴露私有成员的目的
如:
var module=(function(){
var _count=0;
var _testVar=1;
var func1=function(){
console.log('func1_'+this._count);
};
var func2=function(){
console.log('func2_'+_count);
};
return {
func1:func1,
func2:func2,
_count
};
})();
module._count=2;
module.func1();
module.func2();
使用上面写法,外部代码无法调用到_testVar变量,console.log(module._testVar);//undefined
注意上面写法,外部可以调用func1和func2及_count,是函数以对象形式返回了变量;
改变了内部变量_count值,如果内部函数func1不使用this,则不能输出后面改变了_count的值
上面就是JavaScript模块的基本写法
四、放大模式
如果一个模块很大,必须分成几个部分,或者一个模块需要继承另一个模块,这时就有必要采用“放大模式”(augmentation)
如:
var module=(function(mod){
mod.func3=function(){
console.log('func3_'+this._count);
}
return mod;
})(module);
module.func3();
五、宽放大模式
浏览器中,模块的各个部分通常都是从网上获取的,有时无法知道哪个部分会先加载,如果采用上面的写法,没有先加载之前的模块,而是直接先加载了上面四中的模块,就会报空对象的错,这时就要采用“宽放大模式”。
如:
var module=(function(mod){
mod.func3=function(){
console.log('func3_'+this._count);
}
return mod;
})(window.module||{});
module.func3();
与“放大模式”相比,“宽放大模式”就是“立即执行函数”的参数可以是空对象。
六、输入全局变量
独立性是模块的重要特点,模块内部最好不与程序的其他部分直接交互
为了在模块内调用全局变量,必须显示的将其他变量输入模块
如:调用JQuery
var moduleJQuery=(function($){
var func=function(){
$('#txt').val('Text');
};
return {
func:func
};
})(jQuery);
moduleJQuery.func();
JavaScript模块化学习基础的更多相关文章
- javascript 模块化学习:Class打包出来无法实例化问题
菜鸟初学前端,第一次尝试使用webpack, 目的是做一个lib,想用webpack + babel 自动化打包出来 es5 的js代码 模块中用到了Class,直接export{className} ...
- 该如何理解AMD ,CMD,CommonJS规范--javascript模块化加载学习总结
是一篇关于javascript模块化AMD,CMD,CommonJS的学习总结,作为记录也给同样对三种方式有疑问的童鞋们,有不对或者偏差之处,望各位大神指出,不胜感激. 本篇默认读者大概知道requi ...
- JavaScript学习基础部分
JavaScript学习基础 一.简介 1.JavaScript 是因特网上最流行的脚本语言,并且可在所有主要的浏览器中运行,比方说 Internet Explorer. Mozilla.Firefo ...
- JavaScript模块化编程之AMD - requireJS基础使用
JavaScript模块化编程之AMD requireJS基础使用 标签(空格分隔): JavaScript 参考文章 AMD规范 AMD是"Asynchronous Module Defi ...
- Javascript模块化编程(一):模块的写法 (转载 学习中。。。。)
转载地址:http://www.ruanyifeng.com/blog/2012/10/javascript_module.html 阮一峰 大神:http://www.ruanyifeng.com/ ...
- js 模块化的一些理解和es6模块化学习
模块化 1 IIFE 2 commonjs 3 浏览器中js的模块化 4 简单理解模块加载器的原理 5 es6 之前在参加百度前端技术学院做的小题目的时候,自己写模块的时候 都是写成立即调用表达式( ...
- 实现一个JavaScript模块化加载器
对任何程序,都存在一个规模的问题,起初我们使用函数来组织不同的模块,但是随着应用规模的不断变大,简单的重构函数并不能顺利的解决问题.尤其对JavaScript程序而言,模块化有助于解决我们在前端开发中 ...
- Javascript模块化编程之难处
接着上一篇“Javascript模块化编程之Why”说起,Javascript担子重了之后程序也就复杂了.在大把语言都模块化编程的形势下,Javascript也不可能袖手旁观啊,毕竟这是一条经过实践检 ...
- JavaScript模块化思想之入门篇
在写正文之前先写一点废话,从我大三下学期正式接触前端到现在,已经六个月了.自己从HTML,CSS,简单的JS验证开始,一点点开始走入前端的世界.越发的感觉前端这一领域散发着无穷的魅力,也许这和我真心喜 ...
随机推荐
- 【转】【WPF】wpf 图片指针处理
我一直用GDI+做Winform 的基于指针的图片处理,这次下决心全部移到wpf上(主要是显示布局很方便)采用的图片是2512*3307 的大图 830万像素类库基于WritableBitmapEx ...
- Download the WDK, WinDbg, and associated tools
Download the WDK, WinDbg, and associated tools This is where you get your Windows Driver Kit (WDK) a ...
- The ServiceClass object does not implement the required method in the following form: OMElement sayHello(OMElement e)
今天遇到一件诡异的事情,打好的同一个aar包,丢到测试环境tomcat,使用soapui测试,正常反馈结果. 丢到本地tomcat,使用soapui测试,始终报以下错误. <soapenv:En ...
- php基础23:数值与数值函数
<?php //1.自动转换 $a = 5; $b = "5a"; $c = $a + $b; echo $c; echo "<br>"; $ ...
- PHP基础18:require和include
<?phph //1.通过 include 或 require 语句,可以将 PHP 文件的内容插入另一个 PHP 文件(在服务器执行它之前) //include 和 require 语句是相同 ...
- MATLAB中提高fwrite和fprintf函数的I/O性能
提高fwrite和fprintf函数的I/O性能 http://www.matlabsky.com/thread-34861-1-1.html 今天我们将讨论下著名的fwrite(fprint ...
- HDU3923-Invoker-polya n次二面体
polya定理.等价类的个数等于∑颜色数^置换的轮换个数 不可翻转的串当中.直接计算∑m^(gcd(n,i)) ,这里gcd(n,i)就是第i个置换的轮换数. 翻转的情况再分n奇偶讨论. n次二面体都 ...
- 嵌入式Linux驱动开发之helloword心得
自从选择了物联网这个专业,智能XX的字样牵动着每一个学习这个专业的孩子. 大家兴致勃勃的来到了学校,结果一切想象和自己的设想并不一样.想象中的各种智能般梦幻的场景变成了真实的高数/电路/模电等等诸如此 ...
- 教你用netstat-实践案例
netstat命令的功能是显示网络连接.路由表和网络接口信息,可以让用户得知目前都有哪些网络连接正在运作. 该命令的一般格式为: netstat [选项] 命令中各选项的含义如下: -a 显示所有so ...
- Matrix67大牛推荐的省选知识点
时间复杂度(渐近时间复杂度的严格定义,NP问题,时间复杂度的分析方法,主定理)排序算法(平方排序算法的应用,Shell排序,快速排序,归并排序,时间复杂度下界,三种线性时间排序,外部排序)数论(整除, ...